/~ --- 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
    '[a-zA-Z]+\[[a-zA-Z]+\]'        COMMAND
    ;

/~ Left-associative tokens, from lowest to highest precedence ~/
<  '\+'
   '\-';

<  '\*'
   '/';

<  '^';

<  '\,';

<  '<='
   '>='
   '=='
   '!='
   '<'
   '>';

<  '!';

<  '\|\|'
   '\&\&';

##

/~ --- Grammar specification --- ~/

p:      e                          [*%% = ggbr.ggbAct('end', %1);*]
        ;

e:        '(' e ',' e ')'          [*%% = ggbr.ggbAct('coord', %2, %4, element);*] /~ element unabhaengig ~/
        | e '<=' e                 [*%% = ggbr.ggbAct('le', %1, %3);*]
        | e '>=' e                 [*%% = ggbr.ggbAct('ge', %1, %3);*]
        | e '==' e                 [*%% = ggbr.ggbAct('eq', %1, %3);*]
        | e '!=' e                 [*%% = ggbr.ggbAct('neq', %1, %3);*]
        | e '<' e                  [*%% = ggbr.ggbAct('lt', %1, %3);*]
        | e '>' e                  [*%% = ggbr.ggbAct('gt', %1, %3);*]
        | e '+' e                  [*%% = ggbr.ggbAct('add', %1, %3);*]
        | e '-' e                  [*%% = ggbr.ggbAct('sub', %1, %3);*]
		| '!' e                    [*%% = ggbr.ggbAct('neg', %2);*]
		| e '^' e                  [*%% = ggbr.ggbAct('pow', %1, %3);*]
		| e '||' e                 [*%% = ggbr.ggbAct('or', %1, %3);*]
		| e '&&' e                 [*%% = ggbr.ggbAct('and', %1, %3);*]
        | e '*' e                  [*%% = ggbr.ggbAct('mul', %1, %3);*]
        | e '/' e                  [*%% = ggbr.ggbAct('div', %1, %3);*]
        | '-' e &'*'               [*%% = ggbr.ggbAct('negmult', %2);*]
        | '(' e ')'                [*%% = ggbr.ggbAct('bra', %2);*]
        | STRING '+' e             [*%% = ggbr.ggbAct('string', %1, %3);*]
        | INT                      [*%% = ggbr.ggbAct('int', %1);*]
        | FLOAT                    [*%% = ggbr.ggbAct('float', %1);*]
        | PARAM                    [*%% = ggbr.ggbAct('param', %1);*]
        | HTML                     [*%% = ggbr.ggbAct('html', %1);*]
        | STRING                   [*%% = ggbr.ggbAct('string', %1);*]
        | COMMAND                  [*%% = ggbr.ggbAct('command', %1);*]
        | VAR '(' e ')'            [*%% = ggbr.ggbAct('var', %1, %3);*]
        | VAR                      [*%% = ggbr.ggbAct('var', %1);*]
        ;