Add ternary operator

master
Vitaliy Filippov 2019-12-22 02:29:47 +03:00
parent 56ef120056
commit 7643be39f0
3 changed files with 1748 additions and 1512 deletions

View File

@ -7,8 +7,8 @@
* *
* Homepage: http://yourcmc.ru/wiki/VMX::Template * Homepage: http://yourcmc.ru/wiki/VMX::Template
* License: GNU GPLv3 or later * License: GNU GPLv3 or later
* Author: Vitaliy Filippov, 2006-2018 * Author: Vitaliy Filippov, 2006-2019
* Version: V3 (LALR), 2018-08-03 * Version: V3 (LALR), 2019-12-28
* *
* The template engine is split into two parts: * The template engine is split into two parts:
* (1) This file - always used when running templates * (1) This file - always used when running templates

File diff suppressed because it is too large Load Diff

View File

@ -50,6 +50,8 @@
%token ">" "greater than operator '>'" %token ">" "greater than operator '>'"
%token "<=" "less or equal operator '<='" %token "<=" "less or equal operator '<='"
%token ">=" "greater or equal operator '>='" %token ">=" "greater or equal operator '>='"
%token "?" "ternary operator '? :'"
%token ":" "ternary operator '? :'"
%token "+" "plus operator '+'" %token "+" "plus operator '+'"
%token "-" "minus operator '-'" %token "-" "minus operator '-'"
%token "*" "multiply operator '*'" %token "*" "multiply operator '*'"
@ -73,7 +75,7 @@
%left ".." %left ".."
%left "||" "OR" "XOR" %left "||" "OR" "XOR"
%left "&&" "AND" %left "&&" "AND"
%nonassoc "==" "!=" "<" ">" "<=" ">=" %nonassoc "==" "!=" "<" ">" "<=" ">=" "?"
%left "+" "-" %left "+" "-"
%left "&" %left "&"
%left "*" "/" "%" %left "*" "/" "%"
@ -196,6 +198,9 @@ exp: exp/a ".." exp/b {
| exp/a "AND" exp/b { | exp/a "AND" exp/b {
$$ = [ '(' . $a[0] . ' && ' . $b[0] . ')', true ]; $$ = [ '(' . $a[0] . ' && ' . $b[0] . ')', true ];
} }
| exp/a "?" exp/b ":" exp/c {
$$ = [ '(' . $a[0] . ' ? ' . $b[0] . ' : ' . $c[0] . ')', $b[1] && $c[1] ];
}
| exp/a "==" exp/b { | exp/a "==" exp/b {
$$ = [ '(' . $a[0] . ' == ' . $b[0] . ')', true ]; $$ = [ '(' . $a[0] . ' == ' . $b[0] . ')', true ];
} }