Fix ? : precedence

master
Vitaliy Filippov 2020-01-01 17:30:23 +03:00
parent 7643be39f0
commit feb2b5dd47
3 changed files with 26 additions and 104 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-2019 * Author: Vitaliy Filippov, 2006-2020
* Version: V3 (LALR), 2019-12-28 * Version: V3 (LALR), 2020-01-01
* *
* 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

View File

@ -3,8 +3,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-2019 * Author: Vitaliy Filippov, 2006-2020
* Version: V3 (LALR), 2019-12-28 * Version: V3 (LALR), 2020-01-01
* *
* This file contains the implementation of VMX::Template compiler. * This file contains the implementation of VMX::Template compiler.
* It is only used when a template is compiled in runtime. * It is only used when a template is compiled in runtime.
@ -1523,7 +1523,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 32', 'XOR' => 'r 32',
'&&' => 's 20', '&&' => 's 20',
'AND' => 's 22', 'AND' => 's 22',
'?' => 's 24', '?' => 'r 32',
'==' => 's 28', '==' => 's 28',
'!=' => 's 30', '!=' => 's 30',
'<' => 's 32', '<' => 's 32',
@ -1566,7 +1566,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 33', 'XOR' => 'r 33',
'&&' => 's 20', '&&' => 's 20',
'AND' => 's 22', 'AND' => 's 22',
'?' => 's 24', '?' => 'r 33',
'==' => 's 28', '==' => 's 28',
'!=' => 's 30', '!=' => 's 30',
'<' => 's 32', '<' => 's 32',
@ -1609,7 +1609,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 34', 'XOR' => 'r 34',
'&&' => 's 20', '&&' => 's 20',
'AND' => 's 22', 'AND' => 's 22',
'?' => 's 24', '?' => 'r 34',
'==' => 's 28', '==' => 's 28',
'!=' => 's 30', '!=' => 's 30',
'<' => 's 32', '<' => 's 32',
@ -1652,7 +1652,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 35', 'XOR' => 'r 35',
'&&' => 'r 35', '&&' => 'r 35',
'AND' => 'r 35', 'AND' => 'r 35',
'?' => 's 24', '?' => 'r 35',
'==' => 's 28', '==' => 's 28',
'!=' => 's 30', '!=' => 's 30',
'<' => 's 32', '<' => 's 32',
@ -1695,7 +1695,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 36', 'XOR' => 'r 36',
'&&' => 'r 36', '&&' => 'r 36',
'AND' => 'r 36', 'AND' => 'r 36',
'?' => 's 24', '?' => 'r 36',
'==' => 's 28', '==' => 's 28',
'!=' => 's 30', '!=' => 's 30',
'<' => 's 32', '<' => 's 32',
@ -1768,13 +1768,12 @@ class VMXTemplateParser extends lime_parser {
'name' => 's 80' 'name' => 's 80'
), ),
array( array(
'..' => 's 12', '..' => 'r 37',
'||' => 's 14', '||' => 's 14',
'OR' => 's 16', 'OR' => 's 16',
'XOR' => 's 18', 'XOR' => 's 18',
'&&' => 's 20', '&&' => 's 20',
'AND' => 's 22', 'AND' => 's 22',
'?' => 's 24',
'==' => 's 28', '==' => 's 28',
'!=' => 's 30', '!=' => 's 30',
'<' => 's 32', '<' => 's 32',
@ -1817,7 +1816,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 38', 'XOR' => 'r 38',
'&&' => 'r 38', '&&' => 'r 38',
'AND' => 'r 38', 'AND' => 'r 38',
'?' => 's 24', '?' => 'r 38',
'+' => 's 40', '+' => 's 40',
'-' => 's 42', '-' => 's 42',
'&' => 's 44', '&' => 's 44',
@ -1854,7 +1853,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 39', 'XOR' => 'r 39',
'&&' => 'r 39', '&&' => 'r 39',
'AND' => 'r 39', 'AND' => 'r 39',
'?' => 's 24', '?' => 'r 39',
'+' => 's 40', '+' => 's 40',
'-' => 's 42', '-' => 's 42',
'&' => 's 44', '&' => 's 44',
@ -1891,7 +1890,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 40', 'XOR' => 'r 40',
'&&' => 'r 40', '&&' => 'r 40',
'AND' => 'r 40', 'AND' => 'r 40',
'?' => 's 24', '?' => 'r 40',
'+' => 's 40', '+' => 's 40',
'-' => 's 42', '-' => 's 42',
'&' => 's 44', '&' => 's 44',
@ -1928,7 +1927,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 41', 'XOR' => 'r 41',
'&&' => 'r 41', '&&' => 'r 41',
'AND' => 'r 41', 'AND' => 'r 41',
'?' => 's 24', '?' => 'r 41',
'+' => 's 40', '+' => 's 40',
'-' => 's 42', '-' => 's 42',
'&' => 's 44', '&' => 's 44',
@ -1965,7 +1964,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 42', 'XOR' => 'r 42',
'&&' => 'r 42', '&&' => 'r 42',
'AND' => 'r 42', 'AND' => 'r 42',
'?' => 's 24', '?' => 'r 42',
'+' => 's 40', '+' => 's 40',
'-' => 's 42', '-' => 's 42',
'&' => 's 44', '&' => 's 44',
@ -2002,7 +2001,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 43', 'XOR' => 'r 43',
'&&' => 'r 43', '&&' => 'r 43',
'AND' => 'r 43', 'AND' => 'r 43',
'?' => 's 24', '?' => 'r 43',
'+' => 's 40', '+' => 's 40',
'-' => 's 42', '-' => 's 42',
'&' => 's 44', '&' => 's 44',
@ -2039,7 +2038,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 44', 'XOR' => 'r 44',
'&&' => 'r 44', '&&' => 'r 44',
'AND' => 'r 44', 'AND' => 'r 44',
'?' => 's 24', '?' => 'r 44',
'==' => 'r 44', '==' => 'r 44',
'!=' => 'r 44', '!=' => 'r 44',
'<' => 'r 44', '<' => 'r 44',
@ -2082,7 +2081,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 45', 'XOR' => 'r 45',
'&&' => 'r 45', '&&' => 'r 45',
'AND' => 'r 45', 'AND' => 'r 45',
'?' => 's 24', '?' => 'r 45',
'==' => 'r 45', '==' => 'r 45',
'!=' => 'r 45', '!=' => 'r 45',
'<' => 'r 45', '<' => 'r 45',
@ -2125,7 +2124,7 @@ class VMXTemplateParser extends lime_parser {
'XOR' => 'r 46', 'XOR' => 'r 46',
'&&' => 'r 46', '&&' => 'r 46',
'AND' => 'r 46', 'AND' => 'r 46',
'?' => 's 24', '?' => 'r 46',
'==' => 'r 46', '==' => 'r 46',
'!=' => 'r 46', '!=' => 'r 46',
'<' => 'r 46', '<' => 'r 46',
@ -2162,33 +2161,7 @@ class VMXTemplateParser extends lime_parser {
'name' => 's 80' 'name' => 's 80'
), ),
array( array(
'..' => 'r 47', '' => '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( array(
'exp' => 's 49', 'exp' => 's 49',
@ -2205,33 +2178,7 @@ class VMXTemplateParser extends lime_parser {
'name' => 's 80' 'name' => 's 80'
), ),
array( array(
'..' => 'r 48', '' => '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( array(
'exp' => 's 51', 'exp' => 's 51',
@ -2248,33 +2195,7 @@ class VMXTemplateParser extends lime_parser {
'name' => 's 80' 'name' => 's 80'
), ),
array( array(
'..' => 'r 49', '' => '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( array(
'' => 'r 50' '' => 'r 50'
@ -5083,5 +5004,5 @@ class VMXTemplateParser extends lime_parser {
); );
} }
// Time: 0.24801301956177 seconds // Time: 0.23838210105896 seconds
// Memory: 9131704 bytes // Memory: 9123800 bytes

View File

@ -73,9 +73,10 @@
%token "}}" "substitution end" %token "}}" "substitution end"
%left ".." %left ".."
%nonassoc "?" ":"
%left "||" "OR" "XOR" %left "||" "OR" "XOR"
%left "&&" "AND" %left "&&" "AND"
%nonassoc "==" "!=" "<" ">" "<=" ">=" "?" %nonassoc "==" "!=" "<" ">" "<=" ">="
%left "+" "-" %left "+" "-"
%left "&" %left "&"
%left "*" "/" "%" %left "*" "/" "%"