| VarDeclaration |
::= |
Type Identifier ";" |
| Type |
::= |
Identifier |
|
|
| BooleanType |
|
|
| IntegerType |
|
|
| RealType |
|
|
| ArrayType |
| ArrayType |
::= |
"int" "[" "]" |
| ==(与Java类似)== |
|
| "real" "[" "]" |
|
|
| "bool" "[" "]" |
| BooleanType |
::= |
"bool" |
| IntegerType |
::= |
"int" |
| Statement |
::= |
Block |
|
|
| AssignmentStatement |
|
|
| ArrayAssignmentStatement |
|
|
| IfStatement |
|
|
| WhileStatement |
|
|
| ReadStatement |
|
|
| WriteStatement |
| Block |
::= |
"{" ( Statement )* "}" |
| AssignmentStatement |
::= |
Identifier "=" Expression ";" |
| ArrayAssignmentStatement |
::= |
Identifier "[" Expression "]" "=" Expression ";" |
| IfStatement |
::= |
"if" "(" Expression ")" Statement "else" Statement |
| WhileStatement |
::= |
"while" "(" Expression ")" Statement |
| WriteStatement |
::= |
"write" "(" Expression ")" ";" |
| ReadStatement |
::= |
"read" "(" Expression ")" ";" |
| Expression |
::= |
PlusExpression |
|
|
| MinusExpression |
|
|
| TimesExpression |
|
|
| DivideExpression |
|
|
| CompareExpression |
|
|
| ArrayLookup |
|
|
| ArrayLength |
|
|
| PrimaryExpression |
| CompareExpression |
::= |
PrimaryExpression "<" PrimaryExpression |
|
|
| PrimaryExpression ">" PrimaryExpression |
|
|
| PrimaryExpression "<>" PrimaryExpression |
| PlusExpression |
::= |
PrimaryExpression "+" PrimaryExpression |
| MinusExpression |
::= |
PrimaryExpression "-" PrimaryExpression |
| TimesExpression |
::= |
PrimaryExpression "*" PrimaryExpression |
| DivideExpression |
::= |
PrimaryExpression "/" PrimaryExpression |
| ArrayLookup |
::= |
PrimaryExpression "[" PrimaryExpression "]" |
| ArrayLength |
::= |
PrimaryExpression "." "length" |
| ExpressionList |
::= |
Expression ( ExpressionRest )* |
| ExpressionRest |
::= |
"," Expression |
| PrimaryExpression |
::= |
IntegerLiteral |
|
|
| RealLiteral |
|
|
| TrueLiteral |
|
|
| FalseLiteral |
|
|
| BracketExpression |
|
|
| Identifier |
| IntegerLiteral |
::= |
|
| RealLiteral |
::= |
|
| TrueLiteral |
::= |
"true" |
| FalseLiteral |
::= |
"false" |
| Identifier |
::= |
\ |
| BracketExpression |
::= |
"(" Expression ")" |