Concurrent MiniJava Grammar

NON-TERMINALS

Goal ::= MainClassDeclaration ( ClassDeclaration | ThreadClassDeclaration )* <EOF>
MainClassDeclaration ::= "class" <ID> "{" "public" "static" "void" "main" "(" "String" "[" "]" <ID> ")" "{" ( VarDeclaration )* ( Statement )* "}" "}"
ClassDeclaration ::= "class" <ID> ( "extends" <ID> )? "{" ( FieldDeclaration | MethodDeclaration | RunMethodDeclaration )* "}"
ThreadClassDeclaration ::= "class" <ID> "extends" "Thread" "{" ( FieldDeclaration | MethodDeclaration | RunMethodDeclaration )* "}"
VarDeclaration ::= Type <ID> ( "=" Expression )? ";"
MethodDeclaration ::= "public" Type <ID> "(" ( Type <ID> ( "," Type <ID> )* )? ")" "{" ( VarDeclaration )* ( Statement )* "return" Expression ";" "}"
RunMethodDeclaration ::= "public" "void" "run" "(" ")" "{" ( VarDeclaration )* ( Statement )* "}"
FieldDeclaration ::= Type <ID> ";"
Type ::= Type ( "[" "]" )*
| "boolean"
| "int"
| <ID>
Statement ::= "{" ( Statement )* "}"
| "if" "(" Expression ")" Statement ( "else" Statement )?
| "while" "(" Expression ")" Statement
| Expression "=" Expression ";"
| ExternalCallStatement
ExternalCallStatement ::= "Xinu" "." <ID> "(" ( Expression ( "," Expression )* )? ")" ";"
Expression ::= Expression "." <ID>
| Expression "." <ID> "(" ( Expression ( "," Expression )* )? ")"
| Expression "||" Expression
| Expression "&&" Expression
| Expression "==" Expression
| Expression ">" Expression
| Expression "<" Expression
| Expression "+" Expression
| Expression "-" Expression
| Expression "*" Expression
| Expression "/" Expression
| Expression "[" Expression "]"
| "new" Type "(" ")"
| "new" Type "[" Expression "]" ( "[" "]" )*
| "-" Expression
| "!" Expression
| "(" Expression ")"
| ExternalCallExpression
| <ID>
| <INT>
| <STRING>
| "true"
| "false"
| "this"
| "null"
ExternalCallExpression ::= "Xinu" "." <ID> "(" ( Expression ( "," Expression )* )? ")"