|
<DEFAULT> SKIP : { <SPACE: " " | "\t" | "\r" | "\n"> } |
|
<DEFAULT> SKIP : { "/*" : WithinComment } |
|
<WithinComment> SKIP : { "*/" : DEFAULT } |
|
<WithinComment> MORE : { <~[]> } |
|
<DEFAULT> SKIP : { "//" : AfterComment } |
|
<AfterComment> SKIP : { "\n" : DEFAULT } |
|
<AfterComment> MORE : { <~[]> } |
|
<DEFAULT> TOKEN : { <DIJKSTRA: "#dijk"> | <COROUTINDETACH: "#detach"> | <COROUTINCALL: "#call"> | <COROUTINRESUME: "#resume"> | <HOARE: "hoa" (" ")* "("> | <HOARECASE: "*:"> | <REFERENCE: "ref"> | <NEW: "new"> | <THIS: "this"> | <SELECT: "*."> | <LPAREN: "{"> | <RPAREN: "}"> | <ARROW: "->"> | <WHILE: "while" (" ")* "("> | <GOTO: "goto"> | <RETURN: "return:"> | <RETURNVOID: "return;"> | <FOR: "for" (" ")* "("> | <EMPTYSTATEMENT: ";"> | <PRINT: "printf"> | <MAIN: "main:"> } |
|
<DEFAULT> TOKEN : { <UNDEFINEDID: <IDENTIFIER> ":"> | <PROCEDUREID: <IDENTIFIER> "("> | <SELECTTHIS: "this."> | <SELECTID: <IDENTIFIER> "."> | <ARRAYID: <IDENTIFIER> "["> | <DEFINEDID: <IDENTIFIER>> | <NUM: (<DIGIT>)+> | <REALNUM: (<DIGIT>)* "." (<DIGIT>)+ (["e","E"] ["+","-"] <DIGIT>)?> | <#LETTER: ["a"-"z","A"-"Z"]> | <#DIGIT: ["0"-"9"]> | <#IDENTIFIER: <LETTER> (<LETTER> | <DIGIT>)*> } |
|
<DEFAULT> MORE : { "\"" : STR } |
|
<STR> TOKEN : { <STRING: "\"" | "\r\n"> : DEFAULT } |
|
<STR> MORE : { "\\\"" : { } |
|
<STR> MORE : { "\\n" : { } |
|
<STR> MORE : { <~[]> } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<DEFAULT> TOKEN : { <ID: "deadbeef"> | <IF: "if"> | <ELSE: "else"> } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
program | ::= | ( block )+ <EOF> |
|
||
block | ::= | ( dahlObjectClass | <MAIN> <LPAREN> stetementList <RPAREN> ) |
|
||
dahlObjectClass | ::= | <UNDEFINEDID> <LPAREN> stetementList <RPAREN> |
|
||
stetementList | ::= | ( <EMPTYSTATEMENT> | variableDeclaration | hoareCase | procedureCall | variableAssignment | selectiveDeclaration | selectiveUpdate | whileStatement | forStatement | jump | returnStatement | dijkstraCocatnation | printf | <COROUTINDETACH> "(" ")" | <COROUTINCALL> "(" <DEFINEDID> ")" | <COROUTINRESUME> "(" <DEFINEDID> ")" | <MAIN> <LPAREN> stetementList <RPAREN> )* |
|
||
printf | ::= | <PRINT> "(" <STRING> ")" |
|
||
dijkstraCocatnation | ::= | <DIJKSTRA> "(" ( <DEFINEDID> | <STRING> ) ")" |
|
||
variableDeclaration | ::= | <UNDEFINEDID> typeOperation |
|
||
typeOperation | ::= | ( containElementSet | procedureDeclaration | "[" <NUM> "]" "=" typeId | <NEW> <DEFINEDID> | <REFERENCE> <DEFINEDID> assignment | <LPAREN> block <RPAREN> ) |
|
||
containElementSet | ::= | typeId assignment |
|
||
typeId | ::= | <DEFINEDID> |
|
||
procedureDeclaration | ::= | "(" parameterList <LPAREN> stetementList <RPAREN> |
|
||
parameterList | ::= | ( <UNDEFINEDID> ( ( <REFERENCE> )? <DEFINEDID> | procedureDeclaration ) )? ( "," <UNDEFINEDID> ( ( <REFERENCE> )? <DEFINEDID> | procedureDeclaration ) )* ")" |
|
||
hoareCase | ::= | <HOARE> <UNDEFINEDID> "?" assignment ")" <LPAREN> ( <HOARECASE> <DEFINEDID> <LPAREN> stetementList <RPAREN> )+ <RPAREN> |
|
||
selectiveDeclaration | ::= | <SELECT> ( variableDeclaration | <PROCEDUREID> parameterList <LPAREN> stetementList <RPAREN> ) |
|
||
selectiveUpdate | ::= | arrayAssignment |
| | ( ( <SELECTTHIS> | <SELECTID> ) ( procedureCall | variableAssignment | selectiveUpdate ) ) | |
|
||
variableAssignment | ::= | <DEFINEDID> assignment |
|
||
arrayAssignment | ::= | <ARRAYID> expression "]" assignment |
|
||
assignment | ::= | "=" expression |
|
||
procedureCall | ::= | <PROCEDUREID> ( expression ( "," expression )* )? ")" |
|
||
whileStatement | ::= | <WHILE> conditionalExpression ")" <LPAREN> stetementList <RPAREN> |
|
||
forStatement | ::= | <FOR> ")" <LPAREN> stetementList <RPAREN> |
|
||
jump | ::= | <GOTO> <DEFINEDID> |
|
||
returnStatement | ::= | ( <RETURN> <DEFINEDID> expression | <RETURNVOID> ) |
|
||
externalDecl | ::= | variableDecl |
| | subpDeclarator ( ";" | "{" ( variableDecl )* ( stmt )* "}" ) | |
|
||
variableDecl | ::= | <UNDEFINEDID> typeId varDecl ( "," varDecl )* ";" |
|
||
varDecl | ::= | <ID> ( "[" <NUM> "]" | ) |
|
||
subpDeclarator | ::= | typeId <ID> "(" ( paramDecl ( "," paramDecl )* )? ")" |
|
||
paramDecl | ::= | typeId <ID> ( "[" "]" | ) |
|
||
stmt | ::= | ( variable "=" expression ";" | <IF> "(" conditionalExpression ")" stmt ( <ELSE> stmt | ) | <WHILE> "(" conditionalExpression ")" stmt | "{" ( stmt )* "}" | callExpr ";" | <RETURN> ( expression | ) ";" ) |
|
||
conditionalExpression | ::= | expression comparisonOperator expression |
|
||
comparisonOperator | ::= | "==" |
| | "!=" | |
| | ">" | |
| | ">=" | |
| | "<" | |
| | "<=" | |
|
||
expression | ::= | term ( "+" term | "-" term )* |
|
||
term | ::= | factor ( "*" factor | "/" factor )* |
|
||
factor | ::= | "+" factor |
| | "-" factor | |
| | variable | |
| | <THIS> | |
| | <NUM> | |
| | <REALNUM> | |
| | <STRING> | |
|
||
variable | ::= | ( procedureCall | ( <SELECTTHIS> | <SELECTID> ) variable | <DEFINEDID> ( "[" expression "]" | ) ) |
|
||
callExpr | ::= | <DEFINEDID> "(" ( expression ( "," expression )* )? ")" |
|
||
recoveredError | ::= | java code |