Allow keywords after dot
parent
d34beb1d30
commit
ce333f5ded
|
@ -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
|
|
@ -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"
|
||||
.
|
||||
|
|
1336
template.parser.php
1336
template.parser.php
File diff suppressed because it is too large
Load Diff
|
@ -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"
|
||||
%%
|
||||
|
|
Loading…
Reference in New Issue