Article View: pl.comp.lang.c
Article #268086Re: Ciemna strona C++
From: Sebastian Kaliszewski
Date: Fri, 14 Dec 2007 11:31
Date: Fri, 14 Dec 2007 11:31
137 lines
4897 bytes
4897 bytes
Seweryn Habdank-Wojewódzki wrote:
>>A co za problem? Te języki nie mają (poza C) ciężko chorej, kontekstowej
>>składni.
>
>>Parser robi się łatwo -- pół-mechanicznie przepisując publicznie
>>dostępną gramatykę na źródło jakiegoś tam ANTLR-a
>
> Tak.
>
>
>>czy JavaCC czy co tam
>>będzie wygodnego w używanym języku.
>
> Hmm...
Co, hmm???
>>Potem tę przepisaną gramatykę nalezy
>>ubrac w odpowiednie dla zastosowania akcje, ale parserem już jest to coś
>>bez akcji.
>
> Super. A ja pisałem o samodzielnym pisaniu, a nie użyciu gotowców.
Jakich gotowców??? Wiesz co to jest ANTLR czy Yacc czy Bison czy Flex czy
JavaCC?
> Dla
> mnie "Pisałem bezproblemowo" oznacza, że sam pisałem, a nie użyłem
> generatorów kodu.
A co za różnica? Po jaką cholerę się męczyć, jak można użyć właściwego
narzędzia. Narzędzia, które odwali za mnie mechaniczną część roboty.
Zamiast pisać
def parse(file):
while not end(file):
if lookup(file) == WHILE:
parse_while(file)
elif lookup(file) == IF:
parse_if(file)
elif lookup(file) == ID:
parse_assign(file)
else:
raise ParseError, "Unknown instruction"
if(lookup(file) == TERMINATOR:
eat(file)
else:
raise ParseError, "; expected"
def parse_while(file):
eat(file)
parse_expression(file)
if lookup(file) == BEGIN:
parse(file)
if(lookup(file) == END:
eat(file)
else:
raise ParseError, "No matching end"
else:
raise ParseError, "Loop body must begin with begin"
def parse_if(file):
eat(file)
parse_expression(file)
if lookup(file) == BEGIN:
parse(file)
if(lookup(file) == END:
eat(file)
else:
raise ParseError, "No matching end"
else:
raise ParseError, "Conditional instruction body must begin with begin"
if lookup(file) == ELSE:
eat(file)
if lookup(file) == BEGIN:
parse(file)
if(lookup(file) == END:
eat(file)
else:
raise ParseError, "No matching end"
else:
raise ParseError, "Conditional instruction body must begin with begin"
def parse_assign(file):
id = eat(file).value
if lookup(file) != ASSIGN:
raise ParseError, ":= expected"
eat(file)
parse_expression(file)
def parse_expression(file):
if lookup(file) == NUMBER:
num = eat(file).value
elif lookup(file) == ID:
id = eat(file).value
if lookup(file) == MINUS:
eat(file)
parse_expression(file)
Wolę napisać:
body: ((while | if | assign) TERMINATOR)*
while: WHILE expression BEGIN body END
if: IF expression BEGIN body END (ELSE BEGIN body END)?
assign: ID ASSIGN expression
expression: (NUMBER | ID)? (MINUS expression)?
Krócej a znaczy tyle samo. Logiki to za mnie nie rozwiąże, ale pisania dużo
mniej, zapis czytelniejszy i trudniej o błąd.
>>Tak, pisałem przy użyciu ANTLR parser wcale nieprostego języka -- w
>>tydzień był gotowy :)
>
> Super. Gratuluję umiejętności korzystania z "Worda". Co innego jest
> korzystanie z "Worda", a co innego jest napisanie "Worda". Ja też umiem
> kilkać GUI w Javie, a nie twierdze, że "bezproblemowo piszę".
Widzę, że nic a nic nie rozumiesz. Analogia kompletnie bez sensu.
Jak jesteś taki mądry to pisz w assemblerze -- po co ci jakiś język wyższego
poziomu, przecież nie będziesz korzystał z gotowców...
pzdr
\SK
Technical Details
Message-ID:
<fjtojr$qo1$1@bozon2.softax.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.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> <fjsa5u$qi$3@news.vectranet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mail From: Sebastian Kaliszewski <s@get.it.off.to.reply.informa.pl> Newsgroups: pl.comp.lang.c Subject: Re: Ciemna strona C++ Date: Fri, 14 Dec 2007 12:31:59 +0100 Organization: Softax news server Lines: 137 Message-ID: <fjtojr$qo1$1@bozon2.softax.pl> 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> <fjsa5u$qi$3@news.vectranet.pl> NNTP-Posting-Host: 83.18.189.42 Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1197631507 3772 83.18.189.42 (14 Dec 2007 11:25:07 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Fri, 14 Dec 2007 11:25:07 +0000 (UTC) User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050322) X-Accept-Language: en-us, en In-Reply-To: <fjsa5u$qi$3@news.vectranet.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit