From ce333f5dedc79a3b01a7ebaa5850c50775cfeb3a Mon Sep 17 00:00:00 2001 From: vitalif Date: Sun, 25 Aug 2013 22:20:13 +0000 Subject: [PATCH] Allow keywords after dot --- compile.sh | 14 + template.lime | 10 +- template.parser.php | 1336 ++++++++++++++++++++++++++----------------- template.y | 5 +- 4 files changed, 821 insertions(+), 544 deletions(-) create mode 100755 compile.sh diff --git a/compile.sh b/compile.sh new file mode 100755 index 0000000..a6736bb --- /dev/null +++ b/compile.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ "$LIME_DIR" = "" ]; then + LIME_DIR=~/gits/lime/ +fi + +php -d xdebug.max_nesting_level=200 $LIME_DIR/lime.php template.lime | tail -n +2 > template.class +LINES=`grep -n -h " \*\*\* DON'T EDIT THIS FILE! \*\*\*" template.parser.php | perl -pe 's/(\d+):.*/$1-2/e'` +if [ "$LINES" != "" ]; then + head -n $LINES template.parser.php | cat - template.class > template.parser.php.new +else + cat template.parser.php template.class > template.parser.php.new +fi +mv template.parser.php.new template.parser.php diff --git a/template.lime b/template.lime index d9a5f52..fffd2d9 100644 --- a/template.lime +++ b/template.lime @@ -9,6 +9,7 @@ # соответственно выдаёт либо лексемы "внутри" блоков кода, либо литералы # "вне" оных. # Взять таковой можно здесь: https://github.com/vitalif/lime +# Компилить так: php -d xdebug.max_nesting_level=200 lime.php template.lime > template.class # # {{ двойные скобки }} нужно исключительно чтобы маркеры начала и конца подстановки # были уникальны в грамматике. Вместо них обычно используются { одинарные }, а @@ -279,7 +280,7 @@ nonbrace: '{' hash/h '}' { $$ = [ $f.'('.implode(', ', $argv).')', true ]; } . -method: varref/v '.' name/m { +method: varref/v '.' namekw/m { $$ = $v[0].'->'.$m; } . @@ -333,7 +334,7 @@ varref: name/n { $$ = [ $v[0] . $p, false ]; } . -varpart: '.' name/n { +varpart: '.' namekw/n { $$ = "['".addcslashes($n, "\\\'")."']"; } | '[' exp/e ']' { @@ -347,3 +348,8 @@ varpath: { $$ = $a . $p; } . +namekw: name +| "IF" | "END" | "ELSE" | "ELSIF" | "ELSEIF" +| "SET" | "OR" | "XOR" | "AND" | "NOT" +| "FUNCTION" | "BLOCK" | "MACRO" | "FOR" | "FOREACH" +. diff --git a/template.parser.php b/template.parser.php index 667f808..0b10bef 100644 --- a/template.parser.php +++ b/template.parser.php @@ -1333,7 +1333,7 @@ class VMXTemplateParser extends lime_parser { public $i = array( array( 'chunks' => 's 1', - 'template' => 's 174', + 'template' => 's 190', "'start'" => "a 'start'", 'literal' => 'r 1', '' => 's 6' @@ -1429,13 +1429,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 31', @@ -1471,13 +1471,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 32', @@ -1513,13 +1513,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 33', @@ -1555,13 +1555,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 34', @@ -1597,13 +1597,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 35', @@ -1639,13 +1639,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 36', @@ -1681,13 +1681,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 37', @@ -1717,13 +1717,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 38', @@ -1753,13 +1753,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 39', @@ -1789,13 +1789,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 40', @@ -1825,13 +1825,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 41', @@ -1861,13 +1861,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 42', @@ -1897,13 +1897,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 43', @@ -1939,13 +1939,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 44', @@ -1981,13 +1981,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 'r 45', @@ -2023,13 +2023,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '' => 'r 46' @@ -2041,13 +2041,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '' => 'r 47' @@ -2059,13 +2059,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '' => 'r 48' @@ -2080,13 +2080,13 @@ class VMXTemplateParser extends lime_parser { 'p11' => 's 51', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '' => 'r 51' @@ -2101,13 +2101,13 @@ class VMXTemplateParser extends lime_parser { '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 's 12', @@ -2162,8 +2162,8 @@ class VMXTemplateParser extends lime_parser { ), array( '.' => 's 57', - '[' => 's 59', - 'varpart' => 's 104', + '[' => 's 75', + 'varpart' => 's 120', '%' => 'r 53', '/' => 'r 53', '*' => 'r 53', @@ -2191,25 +2191,89 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 53' ), array( - 'name' => 's 58' + 'namekw' => 's 58', + 'name' => 's 59', + 'IF' => 's 60', + 'END' => 's 61', + 'ELSE' => 's 62', + 'ELSIF' => 's 63', + 'ELSEIF' => 's 64', + 'SET' => 's 65', + 'OR' => 's 66', + 'XOR' => 's 67', + 'AND' => 's 68', + 'NOT' => 's 69', + 'FUNCTION' => 's 70', + 'BLOCK' => 's 71', + 'MACRO' => 's 72', + 'FOR' => 's 73', + 'FOREACH' => 's 74' ), array( '' => 'r 81' ), array( - 'exp' => 's 60', + '' => 'r 85' + ), + array( + '' => 'r 86' + ), + array( + '' => 'r 87' + ), + array( + '' => 'r 88' + ), + array( + '' => 'r 89' + ), + array( + '' => 'r 90' + ), + array( + '' => 'r 91' + ), + array( + '' => 'r 92' + ), + array( + '' => 'r 93' + ), + array( + '' => 'r 94' + ), + array( + '' => 'r 95' + ), + array( + '' => 'r 96' + ), + array( + '' => 'r 97' + ), + array( + '' => 'r 98' + ), + array( + '' => 'r 99' + ), + array( + '' => 'r 100' + ), + array( + 'exp' => 's 76', '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 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 's 12', @@ -2230,7 +2294,7 @@ class VMXTemplateParser extends lime_parser { '*' => 's 42', '/' => 's 44', '%' => 's 46', - ']' => 's 61' + ']' => 's 77' ), array( '' => 'r 82' @@ -2238,14 +2302,14 @@ class VMXTemplateParser extends lime_parser { array( 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'p11' => 's 63', - 'NOT' => 's 64', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'p11' => 's 79', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '' => 'r 54' @@ -2253,35 +2317,35 @@ class VMXTemplateParser extends lime_parser { array( 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - 'p11' => 's 65', - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + 'p11' => 's 81', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '' => 'r 55' ), array( - 'exp' => 's 67', + 'exp' => 's 83', 'p10' => 's 48', 'p11' => 's 49', '-' => 's 50', 'nonbrace' => 's 52', '(' => 's 53', - '!' => 's 62', - 'NOT' => 's 64', - '{' => 's 66', - 'hash' => 's 98', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - 'method' => 's 80', - 'pair' => 's 100', - 'gtpair' => 's 103', + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'hash' => 's 114', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96', + 'pair' => 's 116', + 'gtpair' => 's 119', '}' => 'r 73' ), array( @@ -2303,23 +2367,23 @@ class VMXTemplateParser extends lime_parser { '*' => 's 42', '/' => 's 44', '%' => 's 46', - ',' => 's 68', - '=>' => 's 86' + ',' => 's 84', + '=>' => 's 102' ), array( - 'exp' => 's 69', + 'exp' => 's 85', '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 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 's 12', @@ -2347,9 +2411,9 @@ class VMXTemplateParser extends lime_parser { '' => 'r 57' ), array( - '.' => 's 72', - 'varpart' => 's 74', - '[' => 's 59', + '.' => 's 88', + 'varpart' => 's 90', + '[' => 's 75', '%' => 'r 58', '/' => 'r 58', '*' => 'r 58', @@ -2377,7 +2441,23 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 58' ), array( - 'name' => 's 73' + 'namekw' => 's 89', + 'name' => 's 59', + 'IF' => 's 60', + 'END' => 's 61', + 'ELSE' => 's 62', + 'ELSIF' => 's 63', + 'ELSEIF' => 's 64', + 'SET' => 's 65', + 'OR' => 's 66', + 'XOR' => 's 67', + 'AND' => 's 68', + 'NOT' => 's 69', + 'FUNCTION' => 's 70', + 'BLOCK' => 's 71', + 'MACRO' => 's 72', + 'FOR' => 's 73', + 'FOREACH' => 's 74' ), array( '(' => 'r 65', @@ -2413,13 +2493,13 @@ class VMXTemplateParser extends lime_parser { '' => 'r 80' ), array( - '{' => 's 66', - 'literal' => 's 70', - 'varref' => 's 71', - 'name' => 's 75', - '(' => 's 76', - 'nonbrace' => 's 97', - 'method' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + '(' => 's 92', + 'nonbrace' => 's 113', + 'method' => 's 96', '.' => 'r 79', '[' => 'r 79', '%' => 'r 79', @@ -2449,23 +2529,23 @@ class VMXTemplateParser extends lime_parser { '}' => 'r 79' ), array( - 'exp' => 's 77', + 'exp' => 's 93', '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 75', - ')' => 's 88', - 'list' => 's 89', - 'gthash' => 's 91', - 'method' => 's 80', - 'gtpair' => 's 93' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + ')' => 's 104', + 'list' => 's 105', + 'gthash' => 's 107', + 'method' => 's 96', + 'gtpair' => 's 109' ), array( '..' => 's 12', @@ -2486,25 +2566,25 @@ class VMXTemplateParser extends lime_parser { '*' => 's 42', '/' => 's 44', '%' => 's 46', - ',' => 's 78', - '=>' => 's 86', + ',' => 's 94', + '=>' => 's 102', ')' => 'r 66' ), array( - 'exp' => 's 79', + 'exp' => 's 95', '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 75', - 'method' => 's 80', - 'list' => 's 85' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96', + 'list' => 's 101' ), array( '..' => 's 12', @@ -2525,34 +2605,34 @@ class VMXTemplateParser extends lime_parser { '*' => 's 42', '/' => 's 44', '%' => 's 46', - ',' => 's 78', + ',' => 's 94', ')' => 'r 66' ), array( - '(' => 's 81' + '(' => 's 97' ), array( - 'exp' => 's 79', + 'exp' => 's 95', '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 75', - 'method' => 's 80', - ')' => 's 82', - 'list' => 's 83' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96', + ')' => 's 98', + 'list' => 's 99' ), array( '' => 'r 63' ), array( - ')' => 's 84' + ')' => 's 100' ), array( '' => 'r 64' @@ -2561,19 +2641,19 @@ class VMXTemplateParser extends lime_parser { '' => 'r 67' ), array( - 'exp' => 's 87', + 'exp' => 's 103', '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 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 's 12', @@ -2602,37 +2682,37 @@ class VMXTemplateParser extends lime_parser { '' => 'r 59' ), array( - ')' => 's 90' + ')' => 's 106' ), array( '' => 'r 60' ), array( - ')' => 's 92' + ')' => 's 108' ), array( '' => 'r 61' ), array( - ',' => 's 94', + ',' => 's 110', ')' => 'r 74' ), array( - 'exp' => 's 95', + 'exp' => 's 111', '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 75', - 'method' => 's 80', - 'gtpair' => 's 93', - 'gthash' => 's 96' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96', + 'gtpair' => 's 109', + 'gthash' => 's 112' ), array( '..' => 's 12', @@ -2653,7 +2733,7 @@ class VMXTemplateParser extends lime_parser { '*' => 's 42', '/' => 's 44', '%' => 's 46', - '=>' => 's 86' + '=>' => 's 102' ), array( '' => 'r 75' @@ -2662,32 +2742,32 @@ class VMXTemplateParser extends lime_parser { '' => 'r 62' ), array( - '}' => 's 99' + '}' => 's 115' ), array( '' => 'r 56' ), array( - ',' => 's 101', + ',' => 's 117', '}' => 'r 71' ), array( - 'exp' => 's 67', + 'exp' => 's 83', '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 75', - 'method' => 's 80', - 'pair' => 's 100', - 'hash' => 's 102', - 'gtpair' => 's 103', + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96', + 'pair' => 's 116', + 'hash' => 's 118', + 'gtpair' => 's 119', '}' => 'r 73' ), array( @@ -2700,22 +2780,22 @@ class VMXTemplateParser extends lime_parser { '' => 'r 84' ), array( - 'exp' => 's 106', + 'exp' => 's 122', '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 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( - '-->' => 's 107', + '-->' => 's 123', '..' => 's 12', '||' => 's 14', 'OR' => 's 16', @@ -2736,7 +2816,7 @@ class VMXTemplateParser extends lime_parser { '%' => 's 46' ), array( - 'chunks' => 's 108', + 'chunks' => 's 124', 'literal' => 'r 1', '' => 's 112', - 'IF' => 's 156' + '-->' => 's 128', + 'IF' => 's 172' ), array( - 'chunks' => 's 113', + 'chunks' => 's 129', 'literal' => 'r 1', '' => 's 120', - 'varpart' => 's 74', + '=' => 's 134', + '-->' => 's 136', + 'varpart' => 's 90', '.' => 's 57', - '[' => 's 59' + '[' => 's 75' ), array( - 'exp' => 's 119', + 'exp' => 's 135', '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 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 's 12', @@ -2884,7 +2964,7 @@ class VMXTemplateParser extends lime_parser { '-->' => 'r 18' ), array( - 'chunks' => 's 121', + 'chunks' => 's 137', 'literal' => 'r 1', '' => 's 131' + '=' => 's 145', + '-->' => 's 147' ), array( - 'exp' => 's 130', + 'exp' => 's 146', '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 75', - 'method' => 's 80' + '!' => 's 78', + 'NOT' => 's 80', + '{' => 's 82', + 'literal' => 's 86', + 'varref' => 's 87', + 'name' => 's 91', + 'method' => 's 96' ), array( '..' => 's 12', @@ -2984,7 +3064,7 @@ class VMXTemplateParser extends lime_parser { '-->' => 'r 20' ), array( - 'chunks' => 's 132', + 'chunks' => 's 148', 'literal' => 'r 1', '' => 's 139', + '-->' => 's 155', '..' => 's 12', '||' => 's 14', 'OR' => 's 16', @@ -3076,7 +3156,7 @@ class VMXTemplateParser extends lime_parser { '%' => 's 46' ), array( - 'chunks' => 's 140', + 'chunks' => 's 156', 'literal' => 'r 1', '' => 's 159', + '-->' => 's 175', '..' => 's 12', '||' => 's 14', 'OR' => 's 16', @@ -3242,7 +3322,7 @@ class VMXTemplateParser extends lime_parser { '' => 'r 30' ), array( - 'chunks' => 's 163', + 'chunks' => 's 179', 'literal' => 'r 1', '' => 's 167', - 'IF' => 's 156' + '-->' => 's 183', + 'IF' => 's 172' ), array( - 'chunks' => 's 168', + 'chunks' => 's 184', 'literal' => 'r 1', '' => 's 173', + '-->' => 's 189', '..' => 's 12', '||' => 's 14', 'OR' => 's 16', @@ -3381,7 +3461,7 @@ class VMXTemplateParser extends lime_parser { '' => 'r 17' ), array( - '' => 'r 85' + '' => 'r 101' ) ); public $d = array( @@ -3960,7 +4040,7 @@ class VMXTemplateParser extends lime_parser { } function reduce_65_method_1($tokens, &$result) { - // (65) method := varref . name + // (65) method := varref . namekw $result = reset($tokens); $v = &$tokens[0]; $m = &$tokens[2]; @@ -4090,7 +4170,7 @@ class VMXTemplateParser extends lime_parser { } function reduce_81_varpart_1($tokens, &$result) { - // (81) varpart := . name + // (81) varpart := . namekw $result = reset($tokens); $n = &$tokens[1]; @@ -4121,8 +4201,88 @@ class VMXTemplateParser extends lime_parser { $result = $a . $p; } - function reduce_85_start_1($tokens, &$result) { - // (85) 'start' := template + function reduce_85_namekw_1($tokens, &$result) { + // (85) namekw := name + $result = reset($tokens); + } + + function reduce_86_namekw_2($tokens, &$result) { + // (86) namekw := IF + $result = reset($tokens); + } + + function reduce_87_namekw_3($tokens, &$result) { + // (87) namekw := END + $result = reset($tokens); + } + + function reduce_88_namekw_4($tokens, &$result) { + // (88) namekw := ELSE + $result = reset($tokens); + } + + function reduce_89_namekw_5($tokens, &$result) { + // (89) namekw := ELSIF + $result = reset($tokens); + } + + function reduce_90_namekw_6($tokens, &$result) { + // (90) namekw := ELSEIF + $result = reset($tokens); + } + + function reduce_91_namekw_7($tokens, &$result) { + // (91) namekw := SET + $result = reset($tokens); + } + + function reduce_92_namekw_8($tokens, &$result) { + // (92) namekw := OR + $result = reset($tokens); + } + + function reduce_93_namekw_9($tokens, &$result) { + // (93) namekw := XOR + $result = reset($tokens); + } + + function reduce_94_namekw_10($tokens, &$result) { + // (94) namekw := AND + $result = reset($tokens); + } + + function reduce_95_namekw_11($tokens, &$result) { + // (95) namekw := NOT + $result = reset($tokens); + } + + function reduce_96_namekw_12($tokens, &$result) { + // (96) namekw := FUNCTION + $result = reset($tokens); + } + + function reduce_97_namekw_13($tokens, &$result) { + // (97) namekw := BLOCK + $result = reset($tokens); + } + + function reduce_98_namekw_14($tokens, &$result) { + // (98) namekw := MACRO + $result = reset($tokens); + } + + function reduce_99_namekw_15($tokens, &$result) { + // (99) namekw := FOR + $result = reset($tokens); + } + + function reduce_100_namekw_16($tokens, &$result) { + // (100) namekw := FOREACH + $result = reset($tokens); + } + + function reduce_101_start_1($tokens, &$result) { + // (101) 'start' := template $result = reset($tokens); } @@ -4212,7 +4372,23 @@ class VMXTemplateParser extends lime_parser { 'reduce_82_varpart_2', 'reduce_83_varpath_1', 'reduce_84_varpath_2', - 'reduce_85_start_1' + '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( @@ -4640,6 +4816,86 @@ class VMXTemplateParser extends lime_parser { 'len' => 2, 'replace' => true ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), + array( + 'symbol' => 'namekw', + 'len' => 1, + 'replace' => true + ), array( 'symbol' => "'start'", 'len' => 1, @@ -4648,5 +4904,5 @@ class VMXTemplateParser extends lime_parser { ); } -// Time: 2,08367991447 seconds -// Memory: 11242844 bytes +// Time: 2.54209303856 seconds +// Memory: 11662892 bytes diff --git a/template.y b/template.y index c76ea1c..7cff19a 100644 --- a/template.y +++ b/template.y @@ -51,7 +51,7 @@ exp: exp ".." exp | p10: p11 | '-' p11 p11: nonbrace | '(' exp ')' varpath | '!' p11 | "NOT" p11 nonbrace: '{' hash '}' | literal | varref | name '(' ')' | name '(' list ')' | name '(' gthash ')' | name nonbrace | method '(' ')' | method '(' list ')' -method: varref '.' name +method: varref '.' namekw list: exp | exp ',' list arglist: name | name ',' arglist | hash: pair | pair ',' hash | @@ -59,6 +59,7 @@ gthash: gtpair | gtpair ',' gthash pair: exp ',' exp | gtpair gtpair: exp "=>" exp varref: name | varref varpart -varpart: '.' name | '[' exp ']' +varpart: '.' namekw | '[' exp ']' varpath: | varpath varpart +namekw: name | "IF" | "END" | "ELSE" | "ELSIF" | "ELSEIF" | "SET" | "OR" | "XOR" | "AND" | "NOT" | "FUNCTION" | "BLOCK" | "MACRO" | "FOR" | "FOREACH" %%