Remove duplicate varref.method() handling from grammar, use namekw in all grammars
parent
cd71d391c8
commit
b94652978c
File diff suppressed because it is too large
Load Diff
|
@ -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];
|
||||
|
|
2047
template.parser.php
2047
template.parser.php
File diff suppressed because it is too large
Load Diff
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
%%
|
||||
|
|
|
@ -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'
|
||||
;
|
||||
|
||||
%%
|
||||
|
|
Loading…
Reference in New Issue