1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
/~ --- Token definitions --- ~/
/~ Characters to be ignored ~/
! ' |\t' ;
/~ Non-associative tokens ~/
'\('
'\)'
'[0-9]+' INT
'[0-9]+\.[0-9]*|[0-9]*\.[0-9]+' FLOAT
'\_\_[a-zA-Z0-9]+' PARAM
'[a-zA-Z]+(\_*[a-zA-Z0-9]+)*' VAR
'\&[a-zA-Z]+\;' HTML
'\"[a-zA-Z0-9äüöß\=\.\ ]*\"' STRING
;
/~ Left-associative tokens, from lowest to highest precedence ~/
< '\+'
'\-';
< '\*'
'/';
< '^';
< '\,';
< '<='
'>='
'=='
'!='
'<'
'>';
< '!';
< '\|\|'
'\&\&';
##
/~ --- Grammar specification --- ~/
p: e [* alert('Ende: : '+ %1); *]
;
e: '(' e ',' e ')' [* %% = ('coord: '+ %2+', '+ %4); *]
| e '<=' e [* %% = ('le: '+ %1+', '+ %3); *]
| e '>=' e [* %% = ('ge: '+ %1+', '+ %3); *]
| e '==' e [* %% = ('eq: '+ %1+', '+ %3); *]
| e '!=' e [* %% = ('neq: '+ %1+', '+ %3); *]
| e '<' e [* %% = ('lt: '+ %1+', '+ %3); *]
| e '>' e [* %% = ('gt: '+ %1+', '+ %3); *]
| e '+' e [* %% = ('add: '+ %1+', '+ %3); *]
| e '-' e [* %% = ('sub: '+ %1+', '+ %3); *]
| '!' e [* %% = ('neg: '+ %2); *]
| e '^' e [* %% = ('pow: '+ %1+', '+ %3); *]
| e '||' e [* %% = ('or: '+ %1+', '+ %3); *]
| e '&&' e [* %% = ('and: '+ %1+', '+ %3); *]
| e '*' e [* %% = ('mul: '+ %1+', '+ %3); *]
| e '/' e [* %% = ('div: '+ %1+', '+ %3); *]
| '-' e &'*' [* %% = ('negmult: '+ %2); *]
| '(' e ')' [* %% = ('bra: '+ %2); *]
| STRING '+' e [* %% = ('string: '+ %1+', '+ %3); *]
| INT [* %% = ('int: '+ %1); *]
| FLOAT [* %% = ('float: '+ %1); *]
| PARAM [* %% = ('param: '+ %1); *]
| HTML [* %% = ('html: '+ %1); *]
| STRING [* %% = ('string: '+ %1); *]
| VAR '(' e ')' [* %% = ('var: '+ %1+', '+ %3); *]
| VAR [* %% = ('var: '+ %1); *]
;
|