/* volby generátoru */ options { IGNORE_CASE = true; DEBUG_PARSER = true; } /* třída analyzátoru */ PARSER_BEGIN(Project) public class Project { public static void main(String args[]) throws ParseException { Project parser = new Project(System.in); parser.start(); } } PARSER_END(Project) /* WHITE SPACE */ SKIP : { " " | "\t" | "\n" | "\r" | "\f" } /* COMMENTS */ MORE : { "//" : IN_SINGLE_LINE_COMMENT } SPECIAL_TOKEN : { : DEFAULT } MORE : { < ~[] > } TOKEN : { < INT: "int" > | < FLOAT: "float" > | < BOOLEAN: "boolean" > | < STRING: "String" > | < TRUE: "True" > | < FALSE: "False" > | < READ: "read" > | < PRINT: "print" > | < IF: "if" > | < THEN: "then" > | < ELSE: "else" > | < END: "end" > | < WHILE: "while" > | < DO: "do" > } /* LITERALS */ TOKEN : { < INTEGER_LITERAL: (["0"-"9"])+> | < FLOATING_POINT_LITERAL: (["0"-"9"])+ "." (["0"-"9"])* ()? (["f","F","d","D"])? | "." (["0"-"9"])+ ()? (["f","F","d","D"])? | (["0"-"9"])+ (["f","F","d","D"])? | (["0"-"9"])+ ()? ["f","F","d","D"] > | < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ > | < STRING_LITERAL: "\"" ( (~["\"","\\","\n","\r"]) | ("\\" ( ["n","t","b","r","f","\\","'","\""] | ["0"-"7"] ( ["0"-"7"] )? | ["0"-"3"] ["0"-"7"] ["0"-"7"] ) ) )* "\"" > } TOKEN : { < IDENTIFIER: ()* > | < #LETTER:["A"-"Z","_","a"-"z"]> | < #PART_LETTER:["0"-"9","A"-"Z","_","a"-"z"]> } /* SEPARATORS */ TOKEN : { < LPAREN: "(" > | < RPAREN: ")" > | < SEMICOLON: ";" > | < COMMA: "," > } /* OPERATORS */ TOKEN : { < ASSIGN: "=" > | < GT: ">" > | < LT: "<" > | < BANG: "!" > | < DOT: "." > | < HOOK: "?" > | < COLON: ":" > | < EQ: "==" > | < LE: "<=" > | < GE: ">=" > | < NE: "!=" > | < SC_OR: "||" > | < SC_AND: "&&" > | < PLUS: "+" > | < MINUS: "-" > | < STAR: "*" > | < SLASH: "/" > | < REM: "%" > } void start() : {} { block() } void block() : {} { (statement())+ } void statement() : {} { ( ";" )|( (|||) ("," )* ";" )|( "=" expr() ";" )|( expr() ("," expr())* ";" )|( ("," )* ";" )|( expr() block() [ block() ] ";" )|( expr() block() ";" ) } /* * Expression syntax follows. */ void expr() : {} { ConditionalExpression() } void ConditionalExpression() : {} { ConditionalOrExpression() [ "?" expr() ":" ConditionalExpression() ] } void ConditionalOrExpression() : {} { ConditionalAndExpression() ( "||" ConditionalAndExpression() )* } void ConditionalAndExpression() : {} { RelationalExpression() ( "&&" RelationalExpression() )* } void RelationalExpression() : {} { AdditiveExpression() ( ( "==" | "!=" | "<" | ">" | "<=" | ">=" ) AdditiveExpression() )* } void AdditiveExpression() : {} { MultiplicativeExpression() ( ( "+" | "-"|"." ) MultiplicativeExpression() )* } void MultiplicativeExpression() : {} { UnaryExpression() ( ( "*" | "/" | "%" ) UnaryExpression() )* } void UnaryExpression() : {} { ( "+" | "-" ) Literal() | "!" Literal() | Literal() } void Literal() : {} { | | | | | | "(" expr() ")" }