PARSER_BEGIN(Eg1) /** An Arithmetic Grammar. */ public class Eg1 { /** Main entry point. */ public static void main(String args[]) { System.out.println("Reading from standard input..."); Eg1 t = new Eg1(System.in); try { SimpleNode n = t.Start(); n.dump(""); System.out.println("Thank you."); } catch (Exception e) { System.out.println("Oops."); System.out.println(e.getMessage()); e.printStackTrace(); } } } PARSER_END(Eg1) SKIP : { " " | "\t" | "\n" | "\r" //忽略注释符//开头的行和/*注释的 | <"//" (~["\n","\r"])* ("\n"|"\r"|"\r\n")> | <"/*" (~["*"])* "*" (~["/"] (~["*"])* "*")* "/"> } TOKEN : /* LITERALS */ { < INTEGER_LITERAL: <DECIMAL_LITERAL> (["l","L"])? | <HEX_LITERAL> (["l","L"])? | <OCTAL_LITERAL> (["l","L"])? > | //浮点TOKEN < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* > | //十六进制TOKEN < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ > | //十进制TOKEN < #OCTAL_LITERAL: "0" (["0"-"7"])* > } TOKEN : /* IDENTIFIERS */ { < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* > | < #LETTER: ["_","a"-"z","A"-"Z"] > | < #DIGIT: ["0"-"9"] > } /** Main production. */ SimpleNode Start() : {} { Expression() ";" //jjthis返回是一个simplenode类型的树操作 { return jjtThis; } } /** An Expression. */ void Expression() : {} { AdditiveExpression() } /** An Additive Expression. */ void AdditiveExpression() : {} { MultiplicativeExpression() ( ( "+" | "-" ) MultiplicativeExpression() )* } /** A Multiplicative Expression. */ void MultiplicativeExpression() : {} { //匹配类似(IDENTIFIER|INTEGER_LITERAL)*( ( "*" | "/" | "%" ) (IDENTIFIER|INTEGER_LITERAL)* UnaryExpression() ( ( "*" | "/" | "%" ) UnaryExpression() )* } /** 返回TOKEN描述 */ void UnaryExpression() : {} { "(" Expression() ")" | Identifier() | Integer() } /** An Identifier. */ void Identifier() : {} { <IDENTIFIER> } /** An Integer. */ void Integer() : {} { <INTEGER_LITERAL> }