Parsing 如何解析子节点?

Parsing 如何解析子节点?,parsing,compiler-construction,grammar,ebnf,Parsing,Compiler Construction,Grammar,Ebnf,假设我有以下语法: let_stat = "let" iden [ "=" expr ]; if_stat = "if" expr "->" stat; stat = let_stat | if_stat; 这将是以下psuedo ish代码: let_stat parseLetStat() { if token is "let" { consume token if token is identifier { char *v

假设我有以下语法:

let_stat = "let" iden [ "=" expr ];
if_stat = "if" expr "->" stat;
stat = let_stat | if_stat;
这将是以下psuedo ish代码:

let_stat parseLetStat() {


if token is "let" {
        consume token

        if token is identifier {
            char *value = consumetoken.value
            let_stat let = new let_stat;
            let.name = value;

            if token is "=" {
                let.value = parseExpression;
            }

            return let
        }
    }
}

if_stat parseIfStat() {
    if token is "if" {
        consume token

        expression expr = parseExpression;
        block block = parseBlock;

        if_stat ifstmt = new if_stat
        ifstmt.expr = expr
        ifstmt.block = block
        return ifstmt
    }
}

stat parseStatement() {

}

parseStatement
函数会做什么?它将如何选择调用哪个函数,if_stat函数还是let_stat函数?或者我会把所有的代码都放到一个函数中?我不太明白,因为我很困惑,所以任何帮助都是很好的。

解决您特定问题的关键问题是,当EBNF规则中存在替代时,非终结符的解析器必须调用所有替代项,并询问每个替代项是否识别构造;每个子Parser必须返回一个指示是或否的标志


你可能需要的是

哦,我明白了,太好了。当然,唯一的Ira Baxter回答说,你似乎回答了我很多问题:)谢谢!:)@用户3839220:你在我的地盘上提问:-}