source: lliurexberry-gui/trunk/fuentes/src/node_modules/jed/plurals.jison @ 778

Last change on this file since 778 was 778, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 1.8 KB
Line 
1/* description: Parses end executes mathematical expressions. */
2
3/* lexical grammar */
4%lex
5%%
6
7\s+                   /* skip whitespace */
8[0-9]+("."[0-9]+)?\b  return 'NUMBER'
9"n"                   return 'n'
10"||"                  return '||'
11"&&"                  return '&&'
12"?"                   return '?'
13":"                   return ':'
14"<="                  return '<='
15">="                  return '>='
16"<"                   return '<'
17">"                   return '>'
18"!="                  return '!='
19"=="                  return '=='
20"%"                   return '%'
21"("                   return '('
22")"                   return ')'
23<<EOF>>               return 'EOF'
24.                     return 'INVALID'
25
26/lex
27
28/* operator associations and precedence */
29
30%right <code> '?' ':'
31%left '||'
32%left '&&'
33%left '<=' '>=' '<' '>' '!=' '=='
34%left '%'
35
36%start expressions
37
38%% /* language grammar */
39
40expressions
41    : e EOF
42        { return { type : 'GROUP', expr: $1 }; }
43    ;
44
45e
46    : e '?' e ':' e
47        {$$ = { type: 'TERNARY', expr: $1, truthy : $3, falsey: $5 }; }
48    | e '||' e
49        {$$ = { type: "OR", left: $1, right: $3 };}
50    | e '&&' e
51        {$$ = { type: "AND", left: $1, right: $3 };}
52    | e '<' e
53        {$$ = { type: 'LT', left: $1, right: $3 }; }
54    | e '<=' e
55        {$$ = { type: 'LTE', left: $1, right: $3 };}
56    | e '>' e
57        {$$ = { type: 'GT', left: $1, right: $3 };}
58    | e '>=' e
59        {$$ = { type: 'GTE', left: $1, right: $3 };}
60    | e '!=' e
61        {$$ = { type: 'NEQ', left: $1, right: $3 };}
62    | e '==' e
63        {$$ = { type: 'EQ', left: $1, right: $3 };}
64    | e '%' e
65        {$$ = { type: 'MOD', left: $1, right: $3 };}
66    | '(' e ')'
67        {$$ = { type: 'GROUP', expr: $2 }; }
68    | 'n'
69        {$$ = { type: 'VAR' }; }
70    | NUMBER
71        {$$ = { type: 'NUM', val: Number(yytext) }; }
72    ;
Note: See TracBrowser for help on using the repository browser.