Remove duplicate varref.method() handling from grammar, use namekw in all grammars

databind
Vitaliy Filippov 2015-04-12 22:55:30 +03:00
parent cd71d391c8
commit b94652978c
6 changed files with 2573 additions and 2645 deletions

File diff suppressed because it is too large Load Diff

View File

@ -269,20 +269,6 @@ nonbrace: '{' hash/h '}' {
| name/f nonbrace/arg {
$$ = $this->template->compile_function($f, [ $arg ]);
}
| method/f '(' ')' {
$$ = [ $f.'()', true ];
}
| method/f '(' list/args ')' {
$argv = [];
foreach ($args as $a) {
$argv[] = $a[0];
}
$$ = [ $f.'('.implode(', ', $argv).')', true ];
}
.
method: varref/v '.' namekw/m {
$$ = $v[0].'->'.$m;
}
.
list: exp/e {
$$ = [ $e ];
@ -338,10 +324,10 @@ varpart: '.' namekw/n {
| '[' exp/e ']' {
$$ = '['.$e[0].']';
}
| '.' name/n '(' ')' {
| '.' namekw/n '(' ')' {
$$ = '->'.$n.'()';
}
| '.' name/n '(' list/l ')' {
| '.' namekw/n '(' list/l ')' {
$argv = [];
foreach ($l as $a) {
$argv[] = $a[0];

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,7 @@
* Homepage: http://yourcmc.ru/wiki/VMX::Template
* License: GNU GPLv3 or later
* Author: Vitaliy Filippov, 2006-2015
* Version: V3 (LALR), 2015-04-10
* Version: V3 (LALR), 2015-04-12
*
* The template engine is split into two parts:
* (1) This file - always used when running templates

View File

@ -50,8 +50,7 @@ exp: exp ".." exp |
p10
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 '.' namekw
nonbrace: '{' hash '}' | literal | varref | name '(' ')' | name '(' list ')' | name '(' gthash ')' | name nonbrace
list: exp | exp ',' list
arglist: name | name ',' arglist |
hash: pair | pair ',' hash |
@ -59,7 +58,7 @@ gthash: gtpair | gtpair ',' gthash
pair: exp ',' exp | gtpair
gtpair: exp "=>" exp
varref: name | varref varpart
varpart: '.' namekw | '[' exp ']'
varpart: '.' namekw | '[' exp ']' | '.' namekw '(' ')' | '.' namekw '(' list ')'
varpath: | varpath varpart
namekw: name | "IF" | "END" | "ELSE" | "ELSIF" | "ELSEIF" | "SET" | "OR" | "XOR" | "AND" | "NOT" | "FUNCTION" | "BLOCK" | "MACRO" | "FOR" | "FOREACH"
%%

View File

@ -316,16 +316,16 @@ varref: name {
[ $_[1][0] . $_[2], 0 ];
}
;
varpart: '.' name {
varpart: '.' namekw {
"->{'".addcslashes($_[2], "'")."'}";
}
| '[' exp ']' {
($_[2][1] eq 'i' ? '->['.$_[2][0].']' : "->{".$_[2][0]."}");
}
| '.' name '(' ')' {
| '.' namekw '(' ')' {
'->'.$_[2].'()';
}
| '.' name '(' list ')' {
| '.' namekw '(' list ')' {
'->'.$_[2].'('.join(', ', map { $_->[0] } @{$_[4]}).')';
}
;
@ -336,5 +336,7 @@ varpath: {
$_[1] . $_[2];
}
;
namekw: name | 'IF' | 'END' | 'ELSE' | 'ELSIF' | 'ELSEIF' | 'SET' | 'OR' | 'XOR' | 'AND' | 'NOT' | 'FUNCTION' | 'BLOCK' | 'MACRO' | 'FOR' | 'FOREACH'
;
%%