/~ --- 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); *] ;