Article View: pl.comp.lang.c
Article #268081Re: Ciemna strona C++
From: Marcin ‘Qrczak’ Kowalczyk
Date: Fri, 14 Dec 2007 00:26
Date: Fri, 14 Dec 2007 00:26
37 lines
3314 bytes
3314 bytes
Dnia 13-12-2007, Cz o godzinie 23:56 +0100, Adam Karpierz pisze:
> Akurat rozwiazywanie kontekstowosci typedefow jest tak samo proste
> jak "przeslaniania" zmiennych (stos zwykly) i...
> wbrew pozorom nie tyczy czystego synktatycznego parsingu
> a bardziej juz semantyki.
Kontekstowość typedefów wymusza albo informację zwrotną od analizy
semantycznej do leksera (na bieżąco), albo parsowanie do jakiejś
pokręconej struktury uwzględniającej różne możliwości statusu
typedefowego identyfikatorów, która potem będzie dopiero
ujednoznaczniana (nie wiem, czy to w ogóle jest praktyczne, bo
wszyscy robią tą pierwszą metodą, ale teoretycznie parser mógłby
pozostawić coś niewiele różniącego się od ciągu leksemów, więc
jakiś wariant drugiego rozwiązania jest teoretycznie możliwy).
W C++ to jest znacznie gorzej, bo identyfikatory nie muszą być globalne,
tylko mogą pochodzić z szablonów, które trzeba ukonkretniać, więc praca
spleciona z lekserem jest znacznie szersza - obejmuje nawet wyliczanie
stałych wyrażeń (typów całkowitych). Oprócz statusu typedefowego do
parsowania potrzebny jest też status bycia szablonem. Ale w C praktyczna
konieczność splecenia ze sobą faz, które zazwyczaj są osobne, już się
objawia.
> Natomiast kontekstowosc else jest wazna juz na etapie czystego
> parsingu (czyli budowy drzewa) bo bez wlasciwego 'rozwiazania'
> tejze frazy moze to drzewo byc zbudowane niepoprawnie.
Kontekstowość else jest trywialnie rozwiązywalna przez modyfikację
gramatyki (zdublowanie niektórych symboli w wersji dopuszczającej
kończenie się na if bez else bądź nie), choć prościej może być
pozostawić niejednoznaczność, jeśli wiemy, jak będzie rozwiązana.
--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
Technical Details
Message-ID:
<1197591962.23942.28.camel@qrnik>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgv318$hl7$1@bozon2.softax.pl> <fgv82j$htn$1@news.vectranet.pl> <fjncjm$ov6$1@inews.gazeta.pl> <fjpc4l$6ei$2@news.vectranet.pl> <fjrerb$8su$1@bozon2.softax.pl> <fjri46$h22$1@inews.gazeta.pl> <1197561477.3981.11.camel@qrnik> <fjs9m7$qi$2@news.vectranet.pl> <fjsdb1$eeg$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail From: Marcin ‘Qrczak’ Kowalczyk <qrczak@knm.org.pl> Newsgroups: pl.comp.lang.c Subject: Re: Ciemna strona C++ Date: Fri, 14 Dec 2007 01:26:03 +0100 Organization: tp.internet - http://www.tpi.pl/ Lines: 47 Message-ID: <1197591962.23942.28.camel@qrnik> References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgv318$hl7$1@bozon2.softax.pl> <fgv82j$htn$1@news.vectranet.pl> <fjncjm$ov6$1@inews.gazeta.pl> <fjpc4l$6ei$2@news.vectranet.pl> <fjrerb$8su$1@bozon2.softax.pl> <fjri46$h22$1@inews.gazeta.pl> <1197561477.3981.11.camel@qrnik> <fjs9m7$qi$2@news.vectranet.pl> <fjsdb1$eeg$1@inews.gazeta.pl> NNTP-Posting-Host: hjd150.internetdsl.tpnet.pl Mime-Version: 1.0 X-Trace: nemesis.news.tpi.pl 1197592315 1366 79.187.237.150 (14 Dec 2007 00:31:55 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Fri, 14 Dec 2007 00:31:55 +0000 (UTC) In-Reply-To: <fjsdb1$eeg$1@inews.gazeta.pl> X-Mailer: Evolution 2.12.1 PLD Linux Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit