Allow keywords after dot

databind
vitalif 2013-08-25 22:20:13 +00:00 committed by Vitaliy Filippov
parent d34beb1d30
commit ce333f5ded
4 changed files with 821 additions and 544 deletions

14
compile.sh Executable file
View File

@ -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

View File

@ -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"
.

File diff suppressed because it is too large Load Diff

View File

@ -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"
%%