美好的一天。 刚开始使用PEG。 我熟悉wp:peg 和其他一些理论,但仍然无法理解它的内部运作方式。
我的任务是解析像
这样的表达式if($a=='qwerty' && $b>2 || $c<=5)
print 'something';
endif;
Body语句只包含print运算符而不包含其他内容,但它具有复杂的条件。
我的想法:
/*!* Calculator
Int: /[0-9]+/
Var: /\$[a-z]+/
tThen: /then{1}/
tIf: /if{1}/
tElse: /else{1}/
tEndif: /endif{1}/
block: /.+/
condEq: Var '==' ( Int | Var ) *
condStatement: '(' condEq ')'
function condEq( &$result, $sub ) {
if( eval($sub['text'].';') ) {
$result['text'] = 'true';
}
else {
$result['text'] = 'false';
}
}
ifStatement: tIf condStatement
Expr: ifStatement
*/
但我相信这个任务有更好的解决方案:) 你能帮帮我吗? 感谢。