Так позволяет сказать, у меня есть следующая грамматика:Как разобрать дочерние узлы?
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? Или я бы бросил весь код в одну функцию? Я не совсем понимаю, любая помощь будет великолепной, так как я смущен.
О, я вижу, совершенен. И, конечно, ответила одна и единственная Ира Бакстер, ты, кажется, отвечаешь на многие мои вопросы :) Спасибо! :) –
@ user3839220: Вы задаете вопросы на моем торфе: -} –