From 7643be39f0872a4b46d38bd74c0211448918c278 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 22 Dec 2019 02:29:47 +0300 Subject: [PATCH] Add ternary operator --- VMXTemplate.php | 4 +- VMXTemplateCompiler.php | 3249 +++++++++++++++++++++------------------ template.lime | 7 +- 3 files changed, 1748 insertions(+), 1512 deletions(-) diff --git a/VMXTemplate.php b/VMXTemplate.php index f3adae0..685b708 100644 --- a/VMXTemplate.php +++ b/VMXTemplate.php @@ -7,8 +7,8 @@ * * Homepage: http://yourcmc.ru/wiki/VMX::Template * License: GNU GPLv3 or later - * Author: Vitaliy Filippov, 2006-2018 - * Version: V3 (LALR), 2018-08-03 + * Author: Vitaliy Filippov, 2006-2019 + * Version: V3 (LALR), 2019-12-28 * * The template engine is split into two parts: * (1) This file - always used when running templates diff --git a/VMXTemplateCompiler.php b/VMXTemplateCompiler.php index 2af57c3..b288733 100644 --- a/VMXTemplateCompiler.php +++ b/VMXTemplateCompiler.php @@ -3,8 +3,8 @@ /** * Homepage: http://yourcmc.ru/wiki/VMX::Template * License: GNU GPLv3 or later - * Author: Vitaliy Filippov, 2006-2018 - * Version: V3 (LALR), 2018-08-03 + * Author: Vitaliy Filippov, 2006-2019 + * Version: V3 (LALR), 2019-12-28 * * This file contains the implementation of VMX::Template compiler. * It is only used when a template is compiled in runtime. @@ -706,7 +706,7 @@ class VMXTemplateLexer var $last_start, $last_start_line, $in_code, $in_subst, $force_literal = 0; // Possible tokens consisting of special characters - static $chartokens = '+ - = * / % ! , . < > ( ) { } [ ] & .. || && == != <= >= =>'; + static $chartokens = '+ - = * / % ! ? : , . < > ( ) { } [ ] & .. || && == != <= >= =>'; // Reserved keywords static $keywords_str = 'OR XOR AND NOT IF ELSE ELSIF ELSEIF END SET FOR FOREACH FUNCTION BLOCK MACRO'; @@ -1370,7 +1370,7 @@ class VMXTemplateParser extends lime_parser { public $i = array( array( 'chunks' => 's 1', - 'template' => 's 187', + 'template' => 's 191', "'start'" => "a 'start'", 'literal' => 'r 1', '' => 's 6' @@ -1444,33 +1444,34 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 11' ), array( 'exp' => 's 13', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 31', @@ -1479,19 +1480,21 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 31', + ':' => 'r 31', ')' => 'r 31', ',' => 'r 31', '=>' => 'r 31', @@ -1501,17 +1504,17 @@ class VMXTemplateParser extends lime_parser { ), array( 'exp' => 's 15', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 32', @@ -1520,19 +1523,21 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 32', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 32', + ':' => 'r 32', ')' => 'r 32', ',' => 'r 32', '=>' => 'r 32', @@ -1542,17 +1547,17 @@ class VMXTemplateParser extends lime_parser { ), array( 'exp' => 's 17', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 33', @@ -1561,19 +1566,21 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 33', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 33', + ':' => 'r 33', ')' => 'r 33', ',' => 'r 33', '=>' => 'r 33', @@ -1583,17 +1590,17 @@ class VMXTemplateParser extends lime_parser { ), array( 'exp' => 's 19', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 34', @@ -1602,19 +1609,21 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 34', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 34', + ':' => 'r 34', ')' => 'r 34', ',' => 'r 34', '=>' => 'r 34', @@ -1624,17 +1633,17 @@ class VMXTemplateParser extends lime_parser { ), array( 'exp' => 's 21', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 35', @@ -1643,19 +1652,21 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 35', '&&' => 'r 35', 'AND' => 'r 35', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 35', + ':' => 'r 35', ')' => 'r 35', ',' => 'r 35', '=>' => 'r 35', @@ -1665,17 +1676,17 @@ class VMXTemplateParser extends lime_parser { ), array( 'exp' => 's 23', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 36', @@ -1684,19 +1695,21 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 36', '&&' => 'r 36', 'AND' => 'r 36', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 36', + ':' => 'r 36', ')' => 'r 36', ',' => 'r 36', '=>' => 'r 36', @@ -1706,32 +1719,76 @@ class VMXTemplateParser extends lime_parser { ), array( 'exp' => 's 25', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( - '..' => 'r 37', - '||' => 'r 37', - 'OR' => 'r 37', - 'XOR' => 'r 37', - '&&' => 'r 37', - 'AND' => 'r 37', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '..' => 's 12', + '||' => 's 14', + 'OR' => 's 16', + 'XOR' => 's 18', + '&&' => 's 20', + 'AND' => 's 22', + '?' => 's 24', + ':' => 's 26', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50' + ), + array( + 'exp' => 's 27', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' + ), + array( + '..' => 's 12', + '||' => 's 14', + 'OR' => 's 16', + 'XOR' => 's 18', + '&&' => 's 20', + 'AND' => 's 22', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 37', + ':' => 'r 37', ')' => 'r 37', ',' => 'r 37', '=>' => 'r 37', @@ -1740,18 +1797,18 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 37' ), array( - 'exp' => 's 27', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 29', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 38', @@ -1760,13 +1817,15 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 38', '&&' => 'r 38', 'AND' => 'r 38', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 38', + ':' => 'r 38', ')' => 'r 38', ',' => 'r 38', '=>' => 'r 38', @@ -1775,18 +1834,18 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 38' ), array( - 'exp' => 's 29', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 31', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 39', @@ -1795,13 +1854,15 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 39', '&&' => 'r 39', 'AND' => 'r 39', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 39', + ':' => 'r 39', ')' => 'r 39', ',' => 'r 39', '=>' => 'r 39', @@ -1810,18 +1871,18 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 39' ), array( - 'exp' => 's 31', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 33', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 40', @@ -1830,13 +1891,15 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 40', '&&' => 'r 40', 'AND' => 'r 40', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 40', + ':' => 'r 40', ')' => 'r 40', ',' => 'r 40', '=>' => 'r 40', @@ -1845,18 +1908,18 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 40' ), array( - 'exp' => 's 33', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 35', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 41', @@ -1865,13 +1928,15 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 41', '&&' => 'r 41', 'AND' => 'r 41', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 41', + ':' => 'r 41', ')' => 'r 41', ',' => 'r 41', '=>' => 'r 41', @@ -1880,18 +1945,18 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 41' ), array( - 'exp' => 's 35', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 37', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 42', @@ -1900,13 +1965,15 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 42', '&&' => 'r 42', 'AND' => 'r 42', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 42', + ':' => 'r 42', ')' => 'r 42', ',' => 'r 42', '=>' => 'r 42', @@ -1915,18 +1982,18 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 42' ), array( - 'exp' => 's 37', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 39', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 43', @@ -1935,19 +2002,15 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 43', '&&' => 'r 43', 'AND' => 'r 43', - '==' => 'r 43', - '!=' => 'r 43', - '<' => 'r 43', - '>' => 'r 43', - '<=' => 'r 43', - '>=' => 'r 43', - '+' => 'r 43', - '-' => 'r 43', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 43', + ':' => 'r 43', ')' => 'r 43', ',' => 'r 43', '=>' => 'r 43', @@ -1956,18 +2019,18 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 43' ), array( - 'exp' => 's 39', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 41', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 44', @@ -1976,6 +2039,7 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 44', '&&' => 'r 44', 'AND' => 'r 44', + '?' => 's 24', '==' => 'r 44', '!=' => 'r 44', '<' => 'r 44', @@ -1984,11 +2048,12 @@ class VMXTemplateParser extends lime_parser { '>=' => 'r 44', '+' => 'r 44', '-' => 'r 44', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 44', + ':' => 'r 44', ')' => 'r 44', ',' => 'r 44', '=>' => 'r 44', @@ -1997,18 +2062,18 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 44' ), array( - 'exp' => 's 41', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 43', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 'r 45', @@ -2017,6 +2082,7 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 'r 45', '&&' => 'r 45', 'AND' => 'r 45', + '?' => 's 24', '==' => 'r 45', '!=' => 'r 45', '<' => 'r 45', @@ -2025,11 +2091,12 @@ class VMXTemplateParser extends lime_parser { '>=' => 'r 45', '+' => 'r 45', '-' => 'r 45', - '&' => 'r 45', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 45', + ':' => 'r 45', ')' => 'r 45', ',' => 'r 45', '=>' => 'r 45', @@ -2037,93 +2104,214 @@ class VMXTemplateParser extends lime_parser { '}}' => 'r 45', '}' => 'r 45' ), - array( - 'exp' => 's 43', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' - ), - array( - '' => 'r 46' - ), array( 'exp' => 's 45', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( - '' => 'r 47' + '..' => 'r 46', + '||' => 'r 46', + 'OR' => 'r 46', + 'XOR' => 'r 46', + '&&' => 'r 46', + 'AND' => 'r 46', + '?' => 's 24', + '==' => 'r 46', + '!=' => 'r 46', + '<' => 'r 46', + '>' => 'r 46', + '<=' => 'r 46', + '>=' => 'r 46', + '+' => 'r 46', + '-' => 'r 46', + '&' => 'r 46', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', + '-->' => 'r 46', + ':' => 'r 46', + ')' => 'r 46', + ',' => 'r 46', + '=>' => 'r 46', + ']' => 'r 46', + '}}' => 'r 46', + '}' => 'r 46' ), array( 'exp' => 's 47', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( - '' => 'r 48' + '..' => 'r 47', + '||' => 'r 47', + 'OR' => 'r 47', + 'XOR' => 'r 47', + '&&' => 'r 47', + 'AND' => 'r 47', + '?' => 's 24', + '==' => 'r 47', + '!=' => 'r 47', + '<' => 'r 47', + '>' => 'r 47', + '<=' => 'r 47', + '>=' => 'r 47', + '+' => 'r 47', + '-' => 'r 47', + '&' => 'r 47', + '*' => 'r 47', + '/' => 'r 47', + '%' => 'r 47', + '-->' => 'r 47', + ':' => 'r 47', + ')' => 'r 47', + ',' => 'r 47', + '=>' => 'r 47', + ']' => 'r 47', + '}}' => 'r 47', + '}' => 'r 47' ), array( - '' => 'r 49' + 'exp' => 's 49', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' + ), + array( + '..' => 'r 48', + '||' => 'r 48', + 'OR' => 'r 48', + 'XOR' => 'r 48', + '&&' => 'r 48', + 'AND' => 'r 48', + '?' => 's 24', + '==' => 'r 48', + '!=' => 'r 48', + '<' => 'r 48', + '>' => 'r 48', + '<=' => 'r 48', + '>=' => 'r 48', + '+' => 'r 48', + '-' => 'r 48', + '&' => 'r 48', + '*' => 'r 48', + '/' => 'r 48', + '%' => 'r 48', + '-->' => 'r 48', + ':' => 'r 48', + ')' => 'r 48', + ',' => 'r 48', + '=>' => 'r 48', + ']' => 'r 48', + '}}' => 'r 48', + '}' => 'r 48' + ), + array( + 'exp' => 's 51', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' + ), + array( + '..' => 'r 49', + '||' => 'r 49', + 'OR' => 'r 49', + 'XOR' => 'r 49', + '&&' => 'r 49', + 'AND' => 'r 49', + '?' => 's 24', + '==' => 'r 49', + '!=' => 'r 49', + '<' => 'r 49', + '>' => 'r 49', + '<=' => 'r 49', + '>=' => 'r 49', + '+' => 'r 49', + '-' => 'r 49', + '&' => 'r 49', + '*' => 'r 49', + '/' => 'r 49', + '%' => 'r 49', + '-->' => 'r 49', + ':' => 'r 49', + ')' => 'r 49', + ',' => 'r 49', + '=>' => 'r 49', + ']' => 'r 49', + '}}' => 'r 49', + '}' => 'r 49' ), array( '' => 'r 50' ), array( - 'p11' => 's 51', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + '' => 'r 51' ), array( - '' => 'r 51' + 'p11' => 's 55', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '' => 'r 52' ), array( - 'exp' => 's 54', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + '' => 'r 53' + ), + array( + 'exp' => 's 58', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 's 12', @@ -2132,145 +2320,152 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', - ')' => 's 55' + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', + ')' => 's 59' ), array( - 'varpath' => 's 56', - '.' => 'r 82', - '[' => 'r 82', - '%' => 'r 82', - '/' => 'r 82', - '*' => 'r 82', - '&' => 'r 82', - '-' => 'r 82', - '+' => 'r 82', - '>=' => 'r 82', - '<=' => 'r 82', - '>' => 'r 82', - '<' => 'r 82', - '!=' => 'r 82', - '==' => 'r 82', - 'AND' => 'r 82', - '&&' => 'r 82', - 'XOR' => 'r 82', - 'OR' => 'r 82', - '||' => 'r 82', - '..' => 'r 82', - '-->' => 'r 82', - ')' => 'r 82', - ',' => 'r 82', - '=>' => 'r 82', - ']' => 'r 82', - '}}' => 'r 82', - '}' => 'r 82' + 'varpath' => 's 60', + '.' => 'r 83', + '[' => 'r 83', + '%' => 'r 83', + '/' => 'r 83', + '*' => 'r 83', + '&' => 'r 83', + '-' => 'r 83', + '+' => 'r 83', + '>=' => 'r 83', + '<=' => 'r 83', + '>' => 'r 83', + '<' => 'r 83', + '!=' => 'r 83', + '==' => 'r 83', + '?' => 'r 83', + 'AND' => 'r 83', + '&&' => 'r 83', + 'XOR' => 'r 83', + 'OR' => 'r 83', + '||' => 'r 83', + '..' => 'r 83', + '-->' => 'r 83', + ':' => 'r 83', + ')' => 'r 83', + ',' => 'r 83', + '=>' => 'r 83', + ']' => 'r 83', + '}}' => 'r 83', + '}' => 'r 83' ), array( - '.' => 's 57', - '[' => 's 73', - 'varpart' => 's 117', - '%' => 'r 53', - '/' => 'r 53', - '*' => 'r 53', - '&' => 'r 53', - '-' => 'r 53', - '+' => 'r 53', - '>=' => 'r 53', - '<=' => 'r 53', - '>' => 'r 53', - '<' => 'r 53', - '!=' => 'r 53', - '==' => 'r 53', - 'AND' => 'r 53', - '&&' => 'r 53', - 'XOR' => 'r 53', - 'OR' => 'r 53', - '||' => 'r 53', - '..' => 'r 53', - '-->' => 'r 53', - ')' => 'r 53', - ',' => 'r 53', - '=>' => 'r 53', - ']' => 'r 53', - '}}' => 'r 53', - '}' => 'r 53' + '.' => 's 61', + '[' => 's 77', + 'varpart' => 's 121', + '%' => 'r 54', + '/' => 'r 54', + '*' => 'r 54', + '&' => 'r 54', + '-' => 'r 54', + '+' => 'r 54', + '>=' => 'r 54', + '<=' => 'r 54', + '>' => 'r 54', + '<' => 'r 54', + '!=' => 'r 54', + '==' => 'r 54', + '?' => 'r 54', + 'AND' => 'r 54', + '&&' => 'r 54', + 'XOR' => 'r 54', + 'OR' => 'r 54', + '||' => 'r 54', + '..' => 'r 54', + '-->' => 'r 54', + ':' => 'r 54', + ')' => 'r 54', + ',' => 'r 54', + '=>' => 'r 54', + ']' => 'r 54', + '}}' => 'r 54', + '}' => 'r 54' ), array( - 'namekw' => 's 58', - 'name' => 's 101', - 'IF' => 's 102', - 'END' => 's 103', - 'ELSE' => 's 104', - 'ELSIF' => 's 105', - 'ELSEIF' => 's 106', - 'SET' => 's 107', - 'OR' => 's 108', - 'XOR' => 's 109', - 'AND' => 's 110', - 'NOT' => 's 111', - 'FUNCTION' => 's 112', - 'BLOCK' => 's 113', - 'MACRO' => 's 114', - 'FOR' => 's 115', - 'FOREACH' => 's 116' + 'namekw' => 's 62', + 'name' => 's 105', + 'IF' => 's 106', + 'END' => 's 107', + 'ELSE' => 's 108', + 'ELSIF' => 's 109', + 'ELSEIF' => 's 110', + 'SET' => 's 111', + 'OR' => 's 112', + 'XOR' => 's 113', + 'AND' => 's 114', + 'NOT' => 's 115', + 'FUNCTION' => 's 116', + 'BLOCK' => 's 117', + 'MACRO' => 's 118', + 'FOR' => 's 119', + 'FOREACH' => 's 120' ), array( - '(' => 's 59', - '.' => 'r 78', - '[' => 'r 78', - '%' => 'r 78', - '/' => 'r 78', - '*' => 'r 78', - '&' => 'r 78', - '-' => 'r 78', - '+' => 'r 78', - '>=' => 'r 78', - '<=' => 'r 78', - '>' => 'r 78', - '<' => 'r 78', - '!=' => 'r 78', - '==' => 'r 78', - 'AND' => 'r 78', - '&&' => 'r 78', - 'XOR' => 'r 78', - 'OR' => 'r 78', - '||' => 'r 78', - '..' => 'r 78', - '-->' => 'r 78', - ')' => 'r 78', - ',' => 'r 78', - '=>' => 'r 78', - '=' => 'r 78', - ']' => 'r 78', - '}}' => 'r 78', - '}' => 'r 78' + '(' => 's 63', + '.' => 'r 79', + '[' => 'r 79', + '%' => 'r 79', + '/' => 'r 79', + '*' => 'r 79', + '&' => 'r 79', + '-' => 'r 79', + '+' => 'r 79', + '>=' => 'r 79', + '<=' => 'r 79', + '>' => 'r 79', + '<' => 'r 79', + '!=' => 'r 79', + '==' => 'r 79', + '?' => 'r 79', + 'AND' => 'r 79', + '&&' => 'r 79', + 'XOR' => 'r 79', + 'OR' => 'r 79', + '||' => 'r 79', + '..' => 'r 79', + '-->' => 'r 79', + ':' => 'r 79', + ')' => 'r 79', + ',' => 'r 79', + '=>' => 'r 79', + '=' => 'r 79', + ']' => 'r 79', + '}}' => 'r 79', + '}' => 'r 79' ), array( - 'exp' => 's 60', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76', - ')' => 's 98', - 'list' => 's 99' + 'exp' => 's 64', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80', + ')' => 's 102', + 'list' => 's 103' ), array( '..' => 's 12', @@ -2279,437 +2474,445 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', - ',' => 's 61', - ')' => 'r 63' + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', + ',' => 's 65', + ')' => 'r 64' ), array( - 'exp' => 's 60', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76', - 'list' => 's 97' + 'exp' => 's 64', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80', + 'list' => 's 101' ), array( - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'p11' => 's 63', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' - ), - array( - '' => 'r 54' - ), - array( - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - 'p11' => 's 65', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'p11' => 's 67', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '' => 'r 55' ), array( - 'exp' => 's 67', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'hash' => 's 91', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76', - 'pair' => 's 93', - 'gtpair' => 's 96', - '}' => 'r 70' - ), - array( - '..' => 's 12', - '||' => 's 14', - 'OR' => 's 16', - 'XOR' => 's 18', - '&&' => 's 20', - 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', - ',' => 's 68', - '=>' => 's 79' - ), - array( - 'exp' => 's 69', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' - ), - array( - '..' => 's 12', - '||' => 's 14', - 'OR' => 's 16', - 'XOR' => 's 18', - '&&' => 's 20', - 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', - ',' => 'r 73', - '}' => 'r 73' - ), - array( - '' => 'r 57' - ), - array( - 'varpart' => 's 72', - '.' => 's 57', - '[' => 's 73', - '%' => 'r 58', - '/' => 'r 58', - '*' => 'r 58', - '&' => 'r 58', - '-' => 'r 58', - '+' => 'r 58', - '>=' => 'r 58', - '<=' => 'r 58', - '>' => 'r 58', - '<' => 'r 58', - '!=' => 'r 58', - '==' => 'r 58', - 'AND' => 'r 58', - '&&' => 'r 58', - 'XOR' => 'r 58', - 'OR' => 'r 58', - '||' => 'r 58', - '..' => 'r 58', - '-->' => 'r 58', - ')' => 'r 58', - ',' => 'r 58', - '=>' => 'r 58', - ']' => 'r 58', - '}}' => 'r 58', - '}' => 'r 58' - ), - array( - '' => 'r 77' - ), - array( - 'exp' => 's 74', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' - ), - array( - '..' => 's 12', - '||' => 's 14', - 'OR' => 's 16', - 'XOR' => 's 18', - '&&' => 's 20', - 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', - ']' => 's 75' - ), - array( - '' => 'r 79' - ), - array( - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76', - '(' => 's 77', - 'nonbrace' => 's 90', - '.' => 'r 76', - '[' => 'r 76', - '%' => 'r 76', - '/' => 'r 76', - '*' => 'r 76', - '&' => 'r 76', - '-' => 'r 76', - '+' => 'r 76', - '>=' => 'r 76', - '<=' => 'r 76', - '>' => 'r 76', - '<' => 'r 76', - '!=' => 'r 76', - '==' => 'r 76', - 'AND' => 'r 76', - '&&' => 'r 76', - 'XOR' => 'r 76', - 'OR' => 'r 76', - '||' => 'r 76', - '..' => 'r 76', - '-->' => 'r 76', - ')' => 'r 76', - ',' => 'r 76', - '=>' => 'r 76', - ']' => 'r 76', - '}}' => 'r 76', - '}' => 'r 76' - ), - array( - 'exp' => 's 78', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76', - ')' => 's 81', - 'list' => 's 82', - 'gthash' => 's 84', - 'gtpair' => 's 86' - ), - array( - '..' => 's 12', - '||' => 's 14', - 'OR' => 's 16', - 'XOR' => 's 18', - '&&' => 's 20', - 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', - ',' => 's 61', - '=>' => 's 79', - ')' => 'r 63' - ), - array( - 'exp' => 's 80', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' - ), - array( - '..' => 's 12', - '||' => 's 14', - 'OR' => 's 16', - 'XOR' => 's 18', - '&&' => 's 20', - 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', - ',' => 'r 75', - '}' => 'r 75', - ')' => 'r 75' - ), - array( - '' => 'r 59' - ), - array( - ')' => 's 83' - ), - array( - '' => 'r 60' - ), - array( - ')' => 's 85' - ), - array( - '' => 'r 61' - ), - array( - ',' => 's 87', - ')' => 'r 71' - ), - array( - 'exp' => 's 88', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76', - 'gtpair' => 's 86', - 'gthash' => 's 89' - ), - array( - '..' => 's 12', - '||' => 's 14', - 'OR' => 's 16', - 'XOR' => 's 18', - '&&' => 's 20', - 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', - '=>' => 's 79' - ), - array( - '' => 'r 72' - ), - array( - '' => 'r 62' - ), - array( - '}' => 's 92' + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + 'p11' => 's 69', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '' => 'r 56' ), array( - ',' => 's 94', - '}' => 'r 68' - ), - array( - 'exp' => 's 67', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76', - 'pair' => 's 93', + 'exp' => 's 71', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', 'hash' => 's 95', - 'gtpair' => 's 96', - '}' => 'r 70' + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80', + 'pair' => 's 97', + 'gtpair' => 's 100', + '}' => 'r 71' ), array( - '' => 'r 69' + '..' => 's 12', + '||' => 's 14', + 'OR' => 's 16', + 'XOR' => 's 18', + '&&' => 's 20', + 'AND' => 's 22', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', + ',' => 's 72', + '=>' => 's 83' ), array( - '' => 'r 74' + 'exp' => 's 73', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( - '' => 'r 64' + '..' => 's 12', + '||' => 's 14', + 'OR' => 's 16', + 'XOR' => 's 18', + '&&' => 's 20', + 'AND' => 's 22', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', + ',' => 'r 74', + '}' => 'r 74' + ), + array( + '' => 'r 58' + ), + array( + 'varpart' => 's 76', + '.' => 's 61', + '[' => 's 77', + '%' => 'r 59', + '/' => 'r 59', + '*' => 'r 59', + '&' => 'r 59', + '-' => 'r 59', + '+' => 'r 59', + '>=' => 'r 59', + '<=' => 'r 59', + '>' => 'r 59', + '<' => 'r 59', + '!=' => 'r 59', + '==' => 'r 59', + '?' => 'r 59', + 'AND' => 'r 59', + '&&' => 'r 59', + 'XOR' => 'r 59', + 'OR' => 'r 59', + '||' => 'r 59', + '..' => 'r 59', + '-->' => 'r 59', + ':' => 'r 59', + ')' => 'r 59', + ',' => 'r 59', + '=>' => 'r 59', + ']' => 'r 59', + '}}' => 'r 59', + '}' => 'r 59' + ), + array( + '' => 'r 78' + ), + array( + 'exp' => 's 78', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' + ), + array( + '..' => 's 12', + '||' => 's 14', + 'OR' => 's 16', + 'XOR' => 's 18', + '&&' => 's 20', + 'AND' => 's 22', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', + ']' => 's 79' ), array( '' => 'r 80' ), array( - ')' => 's 100' + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80', + '(' => 's 81', + 'nonbrace' => 's 94', + '.' => 'r 77', + '[' => 'r 77', + '%' => 'r 77', + '/' => 'r 77', + '*' => 'r 77', + '&' => 'r 77', + '-' => 'r 77', + '+' => 'r 77', + '>=' => 'r 77', + '<=' => 'r 77', + '>' => 'r 77', + '<' => 'r 77', + '!=' => 'r 77', + '==' => 'r 77', + '?' => 'r 77', + 'AND' => 'r 77', + '&&' => 'r 77', + 'XOR' => 'r 77', + 'OR' => 'r 77', + '||' => 'r 77', + '..' => 'r 77', + '-->' => 'r 77', + ':' => 'r 77', + ')' => 'r 77', + ',' => 'r 77', + '=>' => 'r 77', + ']' => 'r 77', + '}}' => 'r 77', + '}' => 'r 77' + ), + array( + 'exp' => 's 82', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80', + ')' => 's 85', + 'list' => 's 86', + 'gthash' => 's 88', + 'gtpair' => 's 90' + ), + array( + '..' => 's 12', + '||' => 's 14', + 'OR' => 's 16', + 'XOR' => 's 18', + '&&' => 's 20', + 'AND' => 's 22', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', + ',' => 's 65', + '=>' => 's 83', + ')' => 'r 64' + ), + array( + 'exp' => 's 84', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' + ), + array( + '..' => 's 12', + '||' => 's 14', + 'OR' => 's 16', + 'XOR' => 's 18', + '&&' => 's 20', + 'AND' => 's 22', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', + ',' => 'r 76', + '}' => 'r 76', + ')' => 'r 76' + ), + array( + '' => 'r 60' + ), + array( + ')' => 's 87' + ), + array( + '' => 'r 61' + ), + array( + ')' => 's 89' + ), + array( + '' => 'r 62' + ), + array( + ',' => 's 91', + ')' => 'r 72' + ), + array( + 'exp' => 's 92', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80', + 'gtpair' => 's 90', + 'gthash' => 's 93' + ), + array( + '..' => 's 12', + '||' => 's 14', + 'OR' => 's 16', + 'XOR' => 's 18', + '&&' => 's 20', + 'AND' => 's 22', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', + '=>' => 's 83' + ), + array( + '' => 'r 73' + ), + array( + '' => 'r 63' + ), + array( + '}' => 's 96' + ), + array( + '' => 'r 57' + ), + array( + ',' => 's 98', + '}' => 'r 69' + ), + array( + 'exp' => 's 71', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80', + 'pair' => 's 97', + 'hash' => 's 99', + 'gtpair' => 's 100', + '}' => 'r 71' + ), + array( + '' => 'r 70' + ), + array( + '' => 'r 75' + ), + array( + '' => 'r 65' ), array( '' => 'r 81' ), array( - '' => 'r 84' + ')' => 's 104' + ), + array( + '' => 'r 82' ), array( '' => 'r 85' @@ -2757,45 +2960,49 @@ class VMXTemplateParser extends lime_parser { '' => 'r 99' ), array( - '' => 'r 83' + '' => 'r 100' ), array( - 'exp' => 's 119', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + '' => 'r 84' ), array( - '-->' => 's 120', + 'exp' => 's 123', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' + ), + array( + '-->' => 's 124', '..' => 's 12', '||' => 's 14', 'OR' => 's 16', 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46' + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50' ), array( - 'chunks' => 's 121', + 'chunks' => 's 125', 'literal' => 'r 1', '' => 's 125', - 'IF' => 's 169' + '-->' => 's 129', + 'IF' => 's 173' ), array( - 'chunks' => 's 126', + 'chunks' => 's 130', 'literal' => 'r 1', '' => 's 133', - 'varpart' => 's 72', - '.' => 's 57', - '[' => 's 73' + '=' => 's 135', + '-->' => 's 137', + 'varpart' => 's 76', + '.' => 's 61', + '[' => 's 77' ), array( - 'exp' => 's 132', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 136', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 's 12', @@ -2925,22 +3132,23 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 18' ), array( - 'chunks' => 's 134', + 'chunks' => 's 138', 'literal' => 'r 1', '' => 's 144' + '=' => 's 146', + '-->' => 's 148' ), array( - 'exp' => 's 143', - 'p10' => 's 48', - 'p11' => 's 49', - '-' => 's 50', - 'nonbrace' => 's 52', - '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 76' + 'exp' => 's 147', + 'p10' => 's 52', + 'p11' => 's 53', + '-' => 's 54', + 'nonbrace' => 's 56', + '(' => 's 57', + '!' => 's 66', + 'NOT' => 's 68', + '{' => 's 70', + 'literal' => 's 74', + 'varref' => 's 75', + 'name' => 's 80' ), array( '..' => 's 12', @@ -3023,22 +3231,23 @@ class VMXTemplateParser extends lime_parser { 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46', + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50', '-->' => 'r 20' ), array( - 'chunks' => 's 145', + 'chunks' => 's 149', 'literal' => 'r 1', '' => 's 152', + '-->' => 's 156', '..' => 's 12', '||' => 's 14', 'OR' => 's 16', 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46' + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50' ), array( - 'chunks' => 's 153', + 'chunks' => 's 157', 'literal' => 'r 1', '' => 's 172', + '-->' => 's 176', '..' => 's 12', '||' => 's 14', 'OR' => 's 16', 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46' + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50' ), array( '' => 'r 16' @@ -3291,7 +3503,7 @@ class VMXTemplateParser extends lime_parser { '' => 'r 30' ), array( - 'chunks' => 's 176', + 'chunks' => 's 180', 'literal' => 'r 1', '' => 's 180', - 'IF' => 's 169' + '-->' => 's 184', + 'IF' => 's 173' ), array( - 'chunks' => 's 181', + 'chunks' => 's 185', 'literal' => 'r 1', '' => 's 186', + '-->' => 's 190', '..' => 's 12', '||' => 's 14', 'OR' => 's 16', 'XOR' => 's 18', '&&' => 's 20', 'AND' => 's 22', - '==' => 's 24', - '!=' => 's 26', - '<' => 's 28', - '>' => 's 30', - '<=' => 's 32', - '>=' => 's 34', - '+' => 's 36', - '-' => 's 38', - '&' => 's 40', - '*' => 's 42', - '/' => 's 44', - '%' => 's 46' + '?' => 's 24', + '==' => 's 28', + '!=' => 's 30', + '<' => 's 32', + '>' => 's 34', + '<=' => 's 36', + '>=' => 's 38', + '+' => 's 40', + '-' => 's 42', + '&' => 's 44', + '*' => 's 46', + '/' => 's 48', + '%' => 's 50' ), array( '' => 'r 17' ), array( - '' => 'r 100' + '' => 'r 101' ) ); public $d = array( @@ -3444,6 +3657,8 @@ class VMXTemplateParser extends lime_parser { '>' => "greater than operator '>'", '<=' => "less or equal operator '<='", '>=' => "greater or equal operator '>='", + '?' => "ternary operator '? :'", + ':' => "ternary operator '? :'", '+' => "plus operator '+'", '-' => "minus operator '-'", '*' => "multiply operator '*'", @@ -3774,7 +3989,17 @@ class VMXTemplateParser extends lime_parser { } function reduce_37_exp_7($tokens, &$result) { - // (37) exp := exp == exp + // (37) exp := exp ? exp : exp + $result = reset($tokens); + $a = &$tokens[0]; + $b = &$tokens[2]; + $c = &$tokens[4]; + + $result = [ '(' . $a[0] . ' ? ' . $b[0] . ' : ' . $c[0] . ')', $b[1] && $c[1] ]; + } + + function reduce_38_exp_8($tokens, &$result) { + // (38) exp := exp == exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3782,8 +4007,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' == ' . $b[0] . ')', true ]; } - function reduce_38_exp_8($tokens, &$result) { - // (38) exp := exp != exp + function reduce_39_exp_9($tokens, &$result) { + // (39) exp := exp != exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3791,8 +4016,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' != ' . $b[0] . ')', true ]; } - function reduce_39_exp_9($tokens, &$result) { - // (39) exp := exp < exp + function reduce_40_exp_10($tokens, &$result) { + // (40) exp := exp < exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3800,8 +4025,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' < ' . $b[0] . ')', true ]; } - function reduce_40_exp_10($tokens, &$result) { - // (40) exp := exp > exp + function reduce_41_exp_11($tokens, &$result) { + // (41) exp := exp > exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3809,8 +4034,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' > ' . $b[0] . ')', true ]; } - function reduce_41_exp_11($tokens, &$result) { - // (41) exp := exp <= exp + function reduce_42_exp_12($tokens, &$result) { + // (42) exp := exp <= exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3818,8 +4043,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' <= ' . $b[0] . ')', true ]; } - function reduce_42_exp_12($tokens, &$result) { - // (42) exp := exp >= exp + function reduce_43_exp_13($tokens, &$result) { + // (43) exp := exp >= exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3827,8 +4052,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' >= ' . $b[0] . ')', true ]; } - function reduce_43_exp_13($tokens, &$result) { - // (43) exp := exp + exp + function reduce_44_exp_14($tokens, &$result) { + // (44) exp := exp + exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3836,8 +4061,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' + ' . $b[0] . ')', true ]; } - function reduce_44_exp_14($tokens, &$result) { - // (44) exp := exp - exp + function reduce_45_exp_15($tokens, &$result) { + // (45) exp := exp - exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3845,8 +4070,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' - ' . $b[0] . ')', true ]; } - function reduce_45_exp_15($tokens, &$result) { - // (45) exp := exp & exp + function reduce_46_exp_16($tokens, &$result) { + // (46) exp := exp & exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3854,8 +4079,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' & ' . $b[0] . ')', true ]; } - function reduce_46_exp_16($tokens, &$result) { - // (46) exp := exp * exp + function reduce_47_exp_17($tokens, &$result) { + // (47) exp := exp * exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3863,8 +4088,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' * ' . $b[0] . ')', true ]; } - function reduce_47_exp_17($tokens, &$result) { - // (47) exp := exp / exp + function reduce_48_exp_18($tokens, &$result) { + // (48) exp := exp / exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3872,8 +4097,8 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' / ' . $b[0] . ')', true ]; } - function reduce_48_exp_18($tokens, &$result) { - // (48) exp := exp % exp + function reduce_49_exp_19($tokens, &$result) { + // (49) exp := exp % exp $result = reset($tokens); $a = &$tokens[0]; $b = &$tokens[2]; @@ -3881,31 +4106,31 @@ class VMXTemplateParser extends lime_parser { $result = [ '(' . $a[0] . ' % ' . $b[0] . ')', true ]; } - function reduce_49_exp_19($tokens, &$result) { - // (49) exp := p10 + function reduce_50_exp_20($tokens, &$result) { + // (50) exp := p10 $result = $tokens[0]; } - function reduce_50_p10_1($tokens, &$result) { - // (50) p10 := p11 + function reduce_51_p10_1($tokens, &$result) { + // (51) p10 := p11 $result = $tokens[0]; } - function reduce_51_p10_2($tokens, &$result) { - // (51) p10 := - p11 + function reduce_52_p10_2($tokens, &$result) { + // (52) p10 := - p11 $result = reset($tokens); $a = &$tokens[1]; $result = [ '(-'.$a[0].')', true ]; } - function reduce_52_p11_1($tokens, &$result) { - // (52) p11 := nonbrace + function reduce_53_p11_1($tokens, &$result) { + // (53) p11 := nonbrace $result = reset($tokens); } - function reduce_53_p11_2($tokens, &$result) { - // (53) p11 := ( exp ) varpath + function reduce_54_p11_2($tokens, &$result) { + // (54) p11 := ( exp ) varpath $result = reset($tokens); $e = &$tokens[1]; $p = &$tokens[3]; @@ -3913,52 +4138,52 @@ class VMXTemplateParser extends lime_parser { $result = [ ($p !== '' ? 'self::noop('.$e[0].')'.$p : '('.$e[0].')'), false ]; } - function reduce_54_p11_3($tokens, &$result) { - // (54) p11 := ! p11 + function reduce_55_p11_3($tokens, &$result) { + // (55) p11 := ! p11 $result = reset($tokens); $a = &$tokens[1]; $result = [ '(!'.$a[0].')', true ]; } - function reduce_55_p11_4($tokens, &$result) { - // (55) p11 := NOT p11 + function reduce_56_p11_4($tokens, &$result) { + // (56) p11 := NOT p11 $result = reset($tokens); $a = &$tokens[1]; $result = [ '(!'.$a[0].')', true ]; } - function reduce_56_nonbrace_1($tokens, &$result) { - // (56) nonbrace := { hash } + function reduce_57_nonbrace_1($tokens, &$result) { + // (57) nonbrace := { hash } $result = reset($tokens); $h = &$tokens[1]; $result = [ 'array(' . $h . ')', true ]; } - function reduce_57_nonbrace_2($tokens, &$result) { - // (57) nonbrace := literal + function reduce_58_nonbrace_2($tokens, &$result) { + // (58) nonbrace := literal $result = reset($tokens); $result = [ $tokens[0], true ]; } - function reduce_58_nonbrace_3($tokens, &$result) { - // (58) nonbrace := varref + function reduce_59_nonbrace_3($tokens, &$result) { + // (59) nonbrace := varref $result = $tokens[0]; } - function reduce_59_nonbrace_4($tokens, &$result) { - // (59) nonbrace := name ( ) + function reduce_60_nonbrace_4($tokens, &$result) { + // (60) nonbrace := name ( ) $result = reset($tokens); $f = &$tokens[0]; $result = $this->template->compile_function($f, []); } - function reduce_60_nonbrace_5($tokens, &$result) { - // (60) nonbrace := name ( list ) + function reduce_61_nonbrace_5($tokens, &$result) { + // (61) nonbrace := name ( list ) $result = reset($tokens); $f = &$tokens[0]; $args = &$tokens[2]; @@ -3966,8 +4191,8 @@ class VMXTemplateParser extends lime_parser { $result = $this->template->compile_function($f, $args); } - function reduce_61_nonbrace_6($tokens, &$result) { - // (61) nonbrace := name ( gthash ) + function reduce_62_nonbrace_6($tokens, &$result) { + // (62) nonbrace := name ( gthash ) $result = reset($tokens); $f = &$tokens[0]; $args = &$tokens[2]; @@ -3975,8 +4200,8 @@ class VMXTemplateParser extends lime_parser { $result = [ "\$this->parent->call_block('".addcslashes($f, "'\\")."', array(".$args."), '".addcslashes($this->template->lexer->errorinfo(), "'\\")."')", true ]; } - function reduce_62_nonbrace_7($tokens, &$result) { - // (62) nonbrace := name nonbrace + function reduce_63_nonbrace_7($tokens, &$result) { + // (63) nonbrace := name nonbrace $result = reset($tokens); $f = &$tokens[0]; $arg = &$tokens[1]; @@ -3984,16 +4209,16 @@ class VMXTemplateParser extends lime_parser { $result = $this->template->compile_function($f, [ $arg ]); } - function reduce_63_list_1($tokens, &$result) { - // (63) list := exp + function reduce_64_list_1($tokens, &$result) { + // (64) list := exp $result = reset($tokens); $e = &$tokens[0]; $result = [ $e ]; } - function reduce_64_list_2($tokens, &$result) { - // (64) list := exp , list + function reduce_65_list_2($tokens, &$result) { + // (65) list := exp , list $result = reset($tokens); $e = &$tokens[0]; $l = &$tokens[2]; @@ -4002,16 +4227,16 @@ class VMXTemplateParser extends lime_parser { array_unshift($result, $e); } - function reduce_65_arglist_1($tokens, &$result) { - // (65) arglist := name + function reduce_66_arglist_1($tokens, &$result) { + // (66) arglist := name $result = reset($tokens); $n = &$tokens[0]; $result = [ $n ]; } - function reduce_66_arglist_2($tokens, &$result) { - // (66) arglist := name , arglist + function reduce_67_arglist_2($tokens, &$result) { + // (67) arglist := name , arglist $result = reset($tokens); $n = &$tokens[0]; $args = &$tokens[2]; @@ -4020,20 +4245,20 @@ class VMXTemplateParser extends lime_parser { array_unshift($result, $n); } - function reduce_67_arglist_3($tokens, &$result) { - // (67) arglist := ε + function reduce_68_arglist_3($tokens, &$result) { + // (68) arglist := ε $result = reset($tokens); $result = []; } - function reduce_68_hash_1($tokens, &$result) { - // (68) hash := pair + function reduce_69_hash_1($tokens, &$result) { + // (69) hash := pair $result = $tokens[0]; } - function reduce_69_hash_2($tokens, &$result) { - // (69) hash := pair , hash + function reduce_70_hash_2($tokens, &$result) { + // (70) hash := pair , hash $result = reset($tokens); $p = &$tokens[0]; $h = &$tokens[2]; @@ -4041,20 +4266,20 @@ class VMXTemplateParser extends lime_parser { $result = $p . ', ' . $h; } - function reduce_70_hash_3($tokens, &$result) { - // (70) hash := ε + function reduce_71_hash_3($tokens, &$result) { + // (71) hash := ε $result = reset($tokens); $result = ''; } - function reduce_71_gthash_1($tokens, &$result) { - // (71) gthash := gtpair + function reduce_72_gthash_1($tokens, &$result) { + // (72) gthash := gtpair $result = $tokens[0]; } - function reduce_72_gthash_2($tokens, &$result) { - // (72) gthash := gtpair , gthash + function reduce_73_gthash_2($tokens, &$result) { + // (73) gthash := gtpair , gthash $result = reset($tokens); $p = &$tokens[0]; $h = &$tokens[2]; @@ -4062,8 +4287,8 @@ class VMXTemplateParser extends lime_parser { $result = $p . ', ' . $h; } - function reduce_73_pair_1($tokens, &$result) { - // (73) pair := exp , exp + function reduce_74_pair_1($tokens, &$result) { + // (74) pair := exp , exp $result = reset($tokens); $k = &$tokens[0]; $v = &$tokens[2]; @@ -4071,13 +4296,13 @@ class VMXTemplateParser extends lime_parser { $result = $k[0] . ' => ' . $v[0]; } - function reduce_74_pair_2($tokens, &$result) { - // (74) pair := gtpair + function reduce_75_pair_2($tokens, &$result) { + // (75) pair := gtpair $result = $tokens[0]; } - function reduce_75_gtpair_1($tokens, &$result) { - // (75) gtpair := exp => exp + function reduce_76_gtpair_1($tokens, &$result) { + // (76) gtpair := exp => exp $result = reset($tokens); $k = &$tokens[0]; $v = &$tokens[2]; @@ -4085,16 +4310,16 @@ class VMXTemplateParser extends lime_parser { $result = $k[0] . ' => ' . $v[0]; } - function reduce_76_varref_1($tokens, &$result) { - // (76) varref := name + function reduce_77_varref_1($tokens, &$result) { + // (77) varref := name $result = reset($tokens); $n = &$tokens[0]; $result = [ "\$this->tpldata['".addcslashes($n, "\\\'")."']", false ]; } - function reduce_77_varref_2($tokens, &$result) { - // (77) varref := varref varpart + function reduce_78_varref_2($tokens, &$result) { + // (78) varref := varref varpart $result = reset($tokens); $v = &$tokens[0]; $p = &$tokens[1]; @@ -4102,32 +4327,32 @@ class VMXTemplateParser extends lime_parser { $result = [ $v[0] . $p, false ]; } - function reduce_78_varpart_1($tokens, &$result) { - // (78) varpart := . namekw + function reduce_79_varpart_1($tokens, &$result) { + // (79) varpart := . namekw $result = reset($tokens); $n = &$tokens[1]; $result = "['".addcslashes($n, "\\\'")."']"; } - function reduce_79_varpart_2($tokens, &$result) { - // (79) varpart := [ exp ] + function reduce_80_varpart_2($tokens, &$result) { + // (80) varpart := [ exp ] $result = reset($tokens); $e = &$tokens[1]; $result = '['.$e[0].']'; } - function reduce_80_varpart_3($tokens, &$result) { - // (80) varpart := . namekw ( ) + function reduce_81_varpart_3($tokens, &$result) { + // (81) varpart := . namekw ( ) $result = reset($tokens); $n = &$tokens[1]; $result = '->'.$n.'()'; } - function reduce_81_varpart_4($tokens, &$result) { - // (81) varpart := . namekw ( list ) + function reduce_82_varpart_4($tokens, &$result) { + // (82) varpart := . namekw ( list ) $result = reset($tokens); $n = &$tokens[1]; $l = &$tokens[3]; @@ -4139,15 +4364,15 @@ class VMXTemplateParser extends lime_parser { $result = '->'.$n.'('.implode(', ', $argv).')'; } - function reduce_82_varpath_1($tokens, &$result) { - // (82) varpath := ε + function reduce_83_varpath_1($tokens, &$result) { + // (83) varpath := ε $result = reset($tokens); $result = ''; } - function reduce_83_varpath_2($tokens, &$result) { - // (83) varpath := varpath varpart + function reduce_84_varpath_2($tokens, &$result) { + // (84) varpath := varpath varpart $result = reset($tokens); $a = &$tokens[0]; $p = &$tokens[1]; @@ -4155,88 +4380,88 @@ class VMXTemplateParser extends lime_parser { $result = $a . $p; } - function reduce_84_namekw_1($tokens, &$result) { - // (84) namekw := name + function reduce_85_namekw_1($tokens, &$result) { + // (85) namekw := name $result = reset($tokens); } - function reduce_85_namekw_2($tokens, &$result) { - // (85) namekw := IF + function reduce_86_namekw_2($tokens, &$result) { + // (86) namekw := IF $result = reset($tokens); } - function reduce_86_namekw_3($tokens, &$result) { - // (86) namekw := END + function reduce_87_namekw_3($tokens, &$result) { + // (87) namekw := END $result = reset($tokens); } - function reduce_87_namekw_4($tokens, &$result) { - // (87) namekw := ELSE + function reduce_88_namekw_4($tokens, &$result) { + // (88) namekw := ELSE $result = reset($tokens); } - function reduce_88_namekw_5($tokens, &$result) { - // (88) namekw := ELSIF + function reduce_89_namekw_5($tokens, &$result) { + // (89) namekw := ELSIF $result = reset($tokens); } - function reduce_89_namekw_6($tokens, &$result) { - // (89) namekw := ELSEIF + function reduce_90_namekw_6($tokens, &$result) { + // (90) namekw := ELSEIF $result = reset($tokens); } - function reduce_90_namekw_7($tokens, &$result) { - // (90) namekw := SET + function reduce_91_namekw_7($tokens, &$result) { + // (91) namekw := SET $result = reset($tokens); } - function reduce_91_namekw_8($tokens, &$result) { - // (91) namekw := OR + function reduce_92_namekw_8($tokens, &$result) { + // (92) namekw := OR $result = reset($tokens); } - function reduce_92_namekw_9($tokens, &$result) { - // (92) namekw := XOR + function reduce_93_namekw_9($tokens, &$result) { + // (93) namekw := XOR $result = reset($tokens); } - function reduce_93_namekw_10($tokens, &$result) { - // (93) namekw := AND + function reduce_94_namekw_10($tokens, &$result) { + // (94) namekw := AND $result = reset($tokens); } - function reduce_94_namekw_11($tokens, &$result) { - // (94) namekw := NOT + function reduce_95_namekw_11($tokens, &$result) { + // (95) namekw := NOT $result = reset($tokens); } - function reduce_95_namekw_12($tokens, &$result) { - // (95) namekw := FUNCTION + function reduce_96_namekw_12($tokens, &$result) { + // (96) namekw := FUNCTION $result = reset($tokens); } - function reduce_96_namekw_13($tokens, &$result) { - // (96) namekw := BLOCK + function reduce_97_namekw_13($tokens, &$result) { + // (97) namekw := BLOCK $result = reset($tokens); } - function reduce_97_namekw_14($tokens, &$result) { - // (97) namekw := MACRO + function reduce_98_namekw_14($tokens, &$result) { + // (98) namekw := MACRO $result = reset($tokens); } - function reduce_98_namekw_15($tokens, &$result) { - // (98) namekw := FOR + function reduce_99_namekw_15($tokens, &$result) { + // (99) namekw := FOR $result = reset($tokens); } - function reduce_99_namekw_16($tokens, &$result) { - // (99) namekw := FOREACH + function reduce_100_namekw_16($tokens, &$result) { + // (100) namekw := FOREACH $result = reset($tokens); } - function reduce_100_start_1($tokens, &$result) { - // (100) 'start' := template + function reduce_101_start_1($tokens, &$result) { + // (101) 'start' := template $result = reset($tokens); } @@ -4291,57 +4516,58 @@ class VMXTemplateParser extends lime_parser { 'reduce_47_exp_17', 'reduce_48_exp_18', 'reduce_49_exp_19', - 'reduce_50_p10_1', - 'reduce_51_p10_2', - 'reduce_52_p11_1', - 'reduce_53_p11_2', - 'reduce_54_p11_3', - 'reduce_55_p11_4', - 'reduce_56_nonbrace_1', - 'reduce_57_nonbrace_2', - 'reduce_58_nonbrace_3', - 'reduce_59_nonbrace_4', - 'reduce_60_nonbrace_5', - 'reduce_61_nonbrace_6', - 'reduce_62_nonbrace_7', - 'reduce_63_list_1', - 'reduce_64_list_2', - 'reduce_65_arglist_1', - 'reduce_66_arglist_2', - 'reduce_67_arglist_3', - 'reduce_68_hash_1', - 'reduce_69_hash_2', - 'reduce_70_hash_3', - 'reduce_71_gthash_1', - 'reduce_72_gthash_2', - 'reduce_73_pair_1', - 'reduce_74_pair_2', - 'reduce_75_gtpair_1', - 'reduce_76_varref_1', - 'reduce_77_varref_2', - 'reduce_78_varpart_1', - 'reduce_79_varpart_2', - 'reduce_80_varpart_3', - 'reduce_81_varpart_4', - 'reduce_82_varpath_1', - 'reduce_83_varpath_2', - 'reduce_84_namekw_1', - 'reduce_85_namekw_2', - 'reduce_86_namekw_3', - 'reduce_87_namekw_4', - 'reduce_88_namekw_5', - 'reduce_89_namekw_6', - 'reduce_90_namekw_7', - 'reduce_91_namekw_8', - 'reduce_92_namekw_9', - 'reduce_93_namekw_10', - 'reduce_94_namekw_11', - 'reduce_95_namekw_12', - 'reduce_96_namekw_13', - 'reduce_97_namekw_14', - 'reduce_98_namekw_15', - 'reduce_99_namekw_16', - 'reduce_100_start_1' + 'reduce_50_exp_20', + 'reduce_51_p10_1', + 'reduce_52_p10_2', + 'reduce_53_p11_1', + 'reduce_54_p11_2', + 'reduce_55_p11_3', + 'reduce_56_p11_4', + 'reduce_57_nonbrace_1', + 'reduce_58_nonbrace_2', + 'reduce_59_nonbrace_3', + 'reduce_60_nonbrace_4', + 'reduce_61_nonbrace_5', + 'reduce_62_nonbrace_6', + 'reduce_63_nonbrace_7', + 'reduce_64_list_1', + 'reduce_65_list_2', + 'reduce_66_arglist_1', + 'reduce_67_arglist_2', + 'reduce_68_arglist_3', + 'reduce_69_hash_1', + 'reduce_70_hash_2', + 'reduce_71_hash_3', + 'reduce_72_gthash_1', + 'reduce_73_gthash_2', + 'reduce_74_pair_1', + 'reduce_75_pair_2', + 'reduce_76_gtpair_1', + 'reduce_77_varref_1', + 'reduce_78_varref_2', + 'reduce_79_varpart_1', + 'reduce_80_varpart_2', + 'reduce_81_varpart_3', + 'reduce_82_varpart_4', + 'reduce_83_varpath_1', + 'reduce_84_varpath_2', + 'reduce_85_namekw_1', + 'reduce_86_namekw_2', + 'reduce_87_namekw_3', + 'reduce_88_namekw_4', + 'reduce_89_namekw_5', + 'reduce_90_namekw_6', + 'reduce_91_namekw_7', + 'reduce_92_namekw_8', + 'reduce_93_namekw_9', + 'reduce_94_namekw_10', + 'reduce_95_namekw_11', + 'reduce_96_namekw_12', + 'reduce_97_namekw_13', + 'reduce_98_namekw_14', + 'reduce_99_namekw_15', + 'reduce_100_namekw_16', + 'reduce_101_start_1' ); public $a = array( array( @@ -4529,6 +4755,11 @@ class VMXTemplateParser extends lime_parser { 'len' => 3, 'replace' => true ), + array( + 'symbol' => 'exp', + 'len' => 5, + 'replace' => true + ), array( 'symbol' => 'exp', 'len' => 3, @@ -4852,5 +5083,5 @@ class VMXTemplateParser extends lime_parser { ); } -// Time: 0.22696185112 seconds -// Memory: 8865560 bytes +// Time: 0.24801301956177 seconds +// Memory: 9131704 bytes diff --git a/template.lime b/template.lime index 4abd79e..87273af 100644 --- a/template.lime +++ b/template.lime @@ -50,6 +50,8 @@ %token ">" "greater than operator '>'" %token "<=" "less or equal operator '<='" %token ">=" "greater or equal operator '>='" +%token "?" "ternary operator '? :'" +%token ":" "ternary operator '? :'" %token "+" "plus operator '+'" %token "-" "minus operator '-'" %token "*" "multiply operator '*'" @@ -73,7 +75,7 @@ %left ".." %left "||" "OR" "XOR" %left "&&" "AND" -%nonassoc "==" "!=" "<" ">" "<=" ">=" +%nonassoc "==" "!=" "<" ">" "<=" ">=" "?" %left "+" "-" %left "&" %left "*" "/" "%" @@ -196,6 +198,9 @@ exp: exp/a ".." exp/b { | exp/a "AND" exp/b { $$ = [ '(' . $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 { $$ = [ '(' . $a[0] . ' == ' . $b[0] . ')', true ]; }