options { MULTI=true; VISITOR=true; NODE_DEFAULT_VOID=true; NODE_PACKAGE="AST"; STATIC = false; } PARSER_BEGIN(CFGrammar) package AST; import java.util.*; import java.io.*; public class CFGrammar { } PARSER_END(CFGrammar) SKIP : { <(" " |"\t" |"\n" |"\r")+ > // white-space | <""])* ">" > // comment } TOKEN [IGNORE_CASE]: { | } TOKEN : { | // quotedstring withoutwhite-space } CFG CFGrammar() #CFG : {} { RuleList() {return jjtThis;} } void RuleList() #List : {} { (Rule())* } void Rule() #Rule: {} { NDecl() (LOOKAHEAD(Symbol() | "|")ProdList() | ({} #List(0) {} #Prod(1) {} #List(1))) } void ProdList() #List : {} { Prod() ( "|" Prod())* } void Prod() #Prod :{} { SymbolList() } void SymbolList() #List : {} { (Symbol())* } void Symbol() : {} { Terminal() | NUse() } void Terminal() #Terminal : {Token t;} { t = {jjtThis.setTERMINAL(t.image);} } void NUse() #NUse : {Token t;} { t = {jjtThis.setID(t.image);} } void NDecl() #NDecl : {Token t;} { t = {jjtThis.setID(t.image);} }