From sentto-8920903-312-1085692670-gtoal=gtoal.com@returns.groups.yahoo.com Thu May 27 17:00:08 2004 Received: from n41.grp.scd.yahoo.com (localhost [127.0.0.1]) by gtoal.com (8.12.10/8.12.10/SuSE Linux 0.7) with SMTP id i4RM03R5027832 for ; Thu, 27 May 2004 17:00:04 -0500 Received: from 66.218.67.16 ([66.218.67.16]) by bayeschecker for X-eGroups-Return: sentto-8920903-312-1085692670-gtoal=gtoal.com@returns.groups.yahoo.com Received: from [66.218.67.195] by n41.grp.scd.yahoo.com with NNFMP; 27 May 2004 21:17:50 -0000 X-Sender: ed_davis2@yahoo.com X-Apparently-To: compilers101@yahoogroups.com Received: (qmail 22573 invoked from network); 27 May 2004 21:17:46 -0000 Received: from unknown (66.218.66.217) by m2.grp.scd.yahoo.com with QMQP; 27 May 2004 21:17:46 -0000 Received: from unknown (HELO n14.grp.scd.yahoo.com) (66.218.66.69) by mta2.grp.scd.yahoo.com with SMTP; 27 May 2004 21:17:46 -0000 Received: from [66.218.67.175] by n14.grp.scd.yahoo.com with NNFMP; 27 May 2004 21:15:55 -0000 To: compilers101@yahoogroups.com Message-ID: In-Reply-To: User-Agent: eGroups-EW/0.82 X-Mailer: Yahoo Groups Message Poster X-eGroups-Remote-IP: 66.218.66.69 From: "ed_davis2" X-Originating-IP: 68.154.51.153 X-Yahoo-Profile: ed_davis2 MIME-Version: 1.0 Mailing-List: list compilers101@yahoogroups.com; contact compilers101-owner@yahoogroups.com Delivered-To: mailing list compilers101@yahoogroups.com Precedence: bulk List-Unsubscribe: Date: Thu, 27 May 2004 21:15:51 -0000 Subject: [compilers101] Re: Generating (better) code from an AST Reply-To: compilers101@yahoogroups.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Status: R --- In compilers101, "Graham Toal" wrote: > One drawback: it uses my own parser. If we have any yacc/lex > gurus here who want to play with this code, I'ld love to have a > version of the code that uses those instead, just to make it > more approachable to people as usable demo code. How about a Coco/R version? It is a lot easier to use that yacc, and EBNF grammars are easier to read - for me at least. http://www.scifac.ru.ac.za/coco/cocorc17.tgz Here is an un-attributed grammar - it seemes to work fine on 'test.language'. Now to see about adding some TRIP's to it! --------cut here-------- $C COMPILER gt IGNORE CASE CHARACTERS letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz". digit = "0123456789". eol = CHR(13) . lf = CHR(10) . COMMENTS FROM '#' TO eol IGNORE eol + lf TOKENS ident = letter {letter | digit} . number = digit {digit} . PRODUCTIONS gt = stmt_seq . stmt_seq = {stmt} . stmt = "var" Ident {"," Ident} | Ident "=" expr | "if" "(" expr ")" stmt ["else" stmt] | "loop" stmt_seq "endloop" | "break" . expr = and_expr {"or" and_expr} . and_expr = equ_expr {"and" equ_expr} . equ_expr = rel_expr { "==" rel_expr | "!=" rel_expr } . rel_expr = add_expr { "<" add_expr | "<=" add_expr | ">" add_expr | ">=" add_expr } . add_expr = mul_expr { "+" mul_expr | "-" mul_expr } . mul_expr = factor { "*" factor | "/" factor } . factor = primary | "!" primary | "-" primary | "+" primary . primary = Ident | Number | "(" expr ")" . Ident = ident . Number = number . END gt. --------cut here-------- ------------------------ Yahoo! Groups Sponsor --------------------~--> Yahoo! Domains - Claim yours for only $14.70 http://us.click.yahoo.com/Z1wmxD/DREIAA/yQLSAA/saFolB/TM --------------------------------------------------------------------~-> Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/compilers101/ <*> To unsubscribe from this group, send an email to: compilers101-unsubscribe@yahoogroups.com <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/