diff options
| author | Florian Dold <florian.dold@gmail.com> | 2016-10-04 11:55:31 +0200 |
|---|---|---|
| committer | Florian Dold <florian.dold@gmail.com> | 2016-10-04 11:55:31 +0200 |
| commit | 1c26d75f62bd0fb4d2bd8a428d628a6f77d7eb96 (patch) | |
| tree | 36d8bd38e293fd3e47df55a9e90a2edfb1a337fb /thirdparty/jed/plurals.jison | |
| parent | 133a8c672c26609e9d56d4e184b779ca26971a8c (diff) | |
| parent | eeaa2c11ee64761b706a41478bc74fedbf4162d7 (diff) | |
Merge commit 'eeaa2c11ee64761b706a41478bc74fedbf4162d7' as 'thirdparty/jed'
Diffstat (limited to 'thirdparty/jed/plurals.jison')
| -rw-r--r-- | thirdparty/jed/plurals.jison | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/thirdparty/jed/plurals.jison b/thirdparty/jed/plurals.jison new file mode 100644 index 000000000..9364f994e --- /dev/null +++ b/thirdparty/jed/plurals.jison @@ -0,0 +1,72 @@ +/* description: Parses end executes mathematical expressions. */ + +/* lexical grammar */ +%lex +%% + +\s+ /* skip whitespace */ +[0-9]+("."[0-9]+)?\b return 'NUMBER' +"n" return 'n' +"||" return '||' +"&&" return '&&' +"?" return '?' +":" return ':' +"<=" return '<=' +">=" return '>=' +"<" return '<' +">" return '>' +"!=" return '!=' +"==" return '==' +"%" return '%' +"(" return '(' +")" return ')' +<<EOF>> return 'EOF' +. return 'INVALID' + +/lex + +/* operator associations and precedence */ + +%right <code> '?' ':' +%left '||' +%left '&&' +%left '<=' '>=' '<' '>' '!=' '==' +%left '%' + +%start expressions + +%% /* language grammar */ + +expressions + : e EOF + { return { type : 'GROUP', expr: $1 }; } + ; + +e + : e '?' e ':' e + {$$ = { type: 'TERNARY', expr: $1, truthy : $3, falsey: $5 }; } + | e '||' e + {$$ = { type: "OR", left: $1, right: $3 };} + | e '&&' e + {$$ = { type: "AND", left: $1, right: $3 };} + | e '<' e + {$$ = { type: 'LT', left: $1, right: $3 }; } + | e '<=' e + {$$ = { type: 'LTE', left: $1, right: $3 };} + | e '>' e + {$$ = { type: 'GT', left: $1, right: $3 };} + | e '>=' e + {$$ = { type: 'GTE', left: $1, right: $3 };} + | e '!=' e + {$$ = { type: 'NEQ', left: $1, right: $3 };} + | e '==' e + {$$ = { type: 'EQ', left: $1, right: $3 };} + | e '%' e + {$$ = { type: 'MOD', left: $1, right: $3 };} + | '(' e ')' + {$$ = { type: 'GROUP', expr: $2 }; } + | 'n' + {$$ = { type: 'VAR' }; } + | NUMBER + {$$ = { type: 'NUM', val: Number(yytext) }; } + ; |
