79 lines
1.6 KiB
Plaintext
79 lines
1.6 KiB
Plaintext
%token NUMBER
|
|
%token STRING
|
|
%token IDENTIFIER
|
|
%token IDENTIFIEROP
|
|
%token IDENTIFIER:=
|
|
%left '-' '+'
|
|
%left '*' '/'
|
|
%right 'OB'
|
|
%right '^'
|
|
%left '='
|
|
%right 'NEG'
|
|
%left 'SEMI'
|
|
%start (start)
|
|
%%
|
|
start: exp
|
|
|
|
|
;
|
|
args: exp
|
|
| exp 'COMMA' args
|
|
|
|
|
;
|
|
ids:
|
|
| IDENTIFIER ids
|
|
;
|
|
parenthensis-exp: 'OP' exp 'CP'
|
|
;
|
|
atom: NUMBER
|
|
| IDENTIFIER %prec IDENTIFIER
|
|
| STRING
|
|
| parenthensis-exp
|
|
;
|
|
construction-exp: 'OC' args 'CC'
|
|
| 'OP' 'LAMBDA' ids 'PERIOD' exp 'CP'
|
|
| atom
|
|
;
|
|
application-exp: IDENTIFIEROP args 'CP'
|
|
| application-exp 'OP' args 'CP' %prec OP
|
|
| application-exp 'ODB' exp 'CB' 'CB'
|
|
| construction-exp
|
|
;
|
|
power-exp: application-exp '^' power-exp %prec ^
|
|
| application-exp
|
|
;
|
|
sqrt-exp: 'SQRT' sqrt-exp
|
|
| power-exp
|
|
;
|
|
negation-exp: '-' negation-exp
|
|
| sqrt-exp
|
|
;
|
|
multiplication-exp: multiplication-exp '*' negation-exp %prec *
|
|
| multiplication-exp '/' negation-exp %prec /
|
|
| negation-exp
|
|
;
|
|
addition-exp: addition-exp '-' multiplication-exp %prec -
|
|
| addition-exp '+' multiplication-exp %prec +
|
|
| multiplication-exp
|
|
;
|
|
order-exp: addition-exp 'LESS-EQUAL' addition-exp %prec =
|
|
| addition-exp '<' addition-exp %prec =
|
|
| addition-exp 'GREATER-EQUAL' addition-exp %prec =
|
|
| addition-exp '>' addition-exp %prec =
|
|
| addition-exp 'NOT-EQUAL' addition-exp %prec =
|
|
| addition-exp '=' addition-exp %prec =
|
|
| addition-exp
|
|
;
|
|
logical-negation-exp: 'NEG' logical-negation-exp %prec NEG
|
|
| order-exp
|
|
;
|
|
assignment-exp: IDENTIFIER:= assignment-exp
|
|
| IDENTIFIEROP args 'CP' ':=' assignment-exp
|
|
| logical-negation-exp
|
|
;
|
|
compound-exp: compound-exp 'SEMI' assignment-exp
|
|
| assignment-exp
|
|
;
|
|
exp: compound-exp
|
|
;
|
|
%%
|