joel@decwrl.dec.com (10/11/90)
Archive-name: modula-2-grammar/10-Oct-90 Original-posting-by: joel@decwrl.dec.com Original-subject: Re: Can Pascal be parsed by LR(1) parsing algorithm? Archive-site: gatekeeper.dec.com [16.1.0.2] Archive-directory: /pub/DEC/Modula-2 Reposted-by: emv@math.lsa.umich.edu (Edward Vielmetti) Yacc is really a crude tool for parser construction. After much experimentation, I got yacc to not only accept Modula-2's statements, but to report when you forgot to put in a missing semicolon as well. I didn't do the same for Pascal, as it was too much work. You can find complete grammars in the Modula-2/Pascal distribution available for anonymous ftp from gatekeeper.dec.com, file /pub/DEC/Modula-2/m2.vax.tar.Z. Here's the relevant code for Modula-2, just to let you know the horrors of yacc grammar c onstruction. /* blame yacc for gross sequence syntax */ StatementSequence: StatementSequence1 /**/ | semis StatementSequence1 semis { $$ = $2; } | StatementSequence1 semis /**/ | semis StatementSequence1 { $$ = $2; } | semis { $$ = AddToStmtList(0,0); } | /* empty */ { $$ = AddToStmtList(0,0); } ; StatementSequence1: StatementSequence1 semis statement { $$ = AddToStmtList($1,$3); } | StatementSequence1 { yyerror("Missing semicolon"); } statement { $$ = AddToStmtList($1,$3); } | statement { $$ = AddToStmtList(0,$1); } ; semis: SEMICOLON | semis SEMICOLON ; -- - Joel McCormack (decwrl!joel, joel@decwrl.dec.com) -- Send compilers articles to compilers@esegue.segue.boston.ma.us {ima | spdcc | world}!esegue. Meta-mail to compilers-request@esegue.