options { JAVA_UNICODE_ESCAPE = true; } PARSER_BEGIN(SLPParser) public class SLPParser {} PARSER_END(SLPParser) SKIP : { " " | "\r" | "\t" | "\n" | "\f" } TOKEN : { < SEMICOLON: ";" > | < ASSIGN: ":=" > | < PRINT: "print" > | < LPAREN: "(" > | < RPAREN: ")" > | < COMMA: "," > | < PLUS: "+" > | < MINUS: "-" > | < TIMES: "*" > | < DIV: "/" > | < #LETTER: ["a"-"z", "A"-"Z"] > | < #DIGIT: ["0"-"9"] > | < IDENTIFIER: ( | "_" | )* > | < INTEGER_LITERAL: ()+ > } void Goal() : {} { Stm() } void Stm() : {} { CompoundStm() | SimpleStm() } void CompoundStm() : {} { SimpleStm() Stm() } void SimpleStm() : {} { AssignStm() | PrintStm() } void AssignStm() : {} { Exp() } void PrintStm() : {} { ExpList() } void Exp() : {} { AddExp() } void AddExp() : {} { MultExp() ( ( | ) MultExp() )* } void MultExp() : {} { PrimaryExp() ( ( |
) PrimaryExp() )* } void PrimaryExp() : {} { IdExp() | NumExp() | EseqExp() } void IdExp() : {} { } void NumExp() : {} { } void EseqExp() : {} { Stm() Exp() } void ExpList() : {} { Exp() [ ExpList() ] }