" stat; stat = let_stat | if_st-6ren">
gpt4 book ai didi

parsing - 如何解析子节点?

转载 作者:行者123 更新时间:2023-12-02 10:48:15 25 4
gpt4 key购买 nike

假设我有以下语法:

let_stat = "let" iden [ "=" expr ];
if_stat = "if" expr "->" stat;
stat = let_stat | if_stat;

这将是以下伪代码:

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 规则中存在交替时,非终结符的解析器必须调用所有替代方案并询问每个替代方案是否识别该构造;每个子解析器必须返回一个指示是或否的标志。

您可能需要的是general principles for writing a recursive descent parser.

关于parsing - 如何解析子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29352957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com