我有下一个规则:
factor ::= id | func | ( expr )
func ::= id ( list )
list ::= list , expr | expr
我写了一个简单的下降解析器:
function factor() {
if (lookahead === "(") {
match("(");
expr();
return match(")");
} else {
id();
} // How to understand what it can be a func here?
};
function func() {
id();
match("(");
list();
match(")");
};
但是如何将func和id结合起来呢?
左因子语法如下:
factor ::= id ( '(' list ')' )? | '(' expr ')'
list ::= expr ( ',' expr );
注意小心区分文字括号"("one_answers")"和语法分组括号(…)
编码留给读取器:-}
查看我关于如何编写递归解析器的答案以了解详细信息。