98 lines
1.1 KiB
Plaintext
98 lines
1.1 KiB
Plaintext
|
{
|
||
|
static char *RcsId = "$Header$";
|
||
|
}
|
||
|
|
||
|
number:
|
||
|
INTEGER
|
||
|
|
|
||
|
REAL
|
||
|
;
|
||
|
|
||
|
qualident:
|
||
|
IDENT selector*
|
||
|
;
|
||
|
|
||
|
selector:
|
||
|
'.' /* field */ IDENT
|
||
|
;
|
||
|
|
||
|
ExpList:
|
||
|
expression [ ',' expression ]*
|
||
|
;
|
||
|
|
||
|
ConstExpression:
|
||
|
expression
|
||
|
/*
|
||
|
* Changed rule in new Modula-2.
|
||
|
* Check that the expression is a constant expression and evaluate!
|
||
|
*/
|
||
|
;
|
||
|
|
||
|
expression:
|
||
|
SimpleExpression [ relation SimpleExpression ]?
|
||
|
;
|
||
|
|
||
|
relation:
|
||
|
'=' | '#' | UNEQUAL | '<' | LESSEQUAL | '>' | GREATEREQUAL | IN
|
||
|
;
|
||
|
|
||
|
SimpleExpression:
|
||
|
[ '+' | '-' ]? term [ AddOperator term ]*
|
||
|
;
|
||
|
|
||
|
AddOperator:
|
||
|
'+' | '-' | OR
|
||
|
;
|
||
|
|
||
|
term:
|
||
|
factor [ MulOperator factor ]*
|
||
|
;
|
||
|
|
||
|
MulOperator:
|
||
|
'*' | '/' | DIV | MOD | AND | '&'
|
||
|
;
|
||
|
|
||
|
factor:
|
||
|
qualident
|
||
|
[
|
||
|
designator_tail? ActualParameters?
|
||
|
|
|
||
|
bare_set
|
||
|
]
|
||
|
|
|
||
|
bare_set
|
||
|
| %default
|
||
|
number
|
||
|
|
|
||
|
STRING
|
||
|
|
|
||
|
'(' expression ')'
|
||
|
|
|
||
|
NOT factor
|
||
|
;
|
||
|
|
||
|
bare_set:
|
||
|
'{' [ element [ ',' element ]* ]? '}'
|
||
|
;
|
||
|
|
||
|
ActualParameters:
|
||
|
'(' ExpList? ')'
|
||
|
;
|
||
|
|
||
|
element:
|
||
|
expression [ UPTO expression ]?
|
||
|
;
|
||
|
|
||
|
designator:
|
||
|
qualident designator_tail?
|
||
|
;
|
||
|
|
||
|
designator_tail:
|
||
|
visible_designator_tail
|
||
|
[ selector | visible_designator_tail ]*
|
||
|
;
|
||
|
|
||
|
visible_designator_tail:
|
||
|
'[' ExpList ']' | '^'
|
||
|
;
|