解析技术:从预测解析到LR解析
1. 解析基础与文件结束符
在解析过程中,解析器不仅要读取像 + 、 - 、 num 这样的终结符,还需要处理文件结束符。我们用 $ 来表示文件结束。假设 S 是一个文法的开始符号,为了表明 $ 必须跟在一个完整的 S 短语之后,我们会为文法添加一个新的开始符号 S′ 和一个新的产生式 S′ → S$ 。
2. 预测解析
2.1 递归下降解析器示例
某些文法可以使用递归下降这种简单算法进行解析。本质上,每个文法产生式会转化为递归函数的一个子句。以下是为文法 3.11 编写的递归下降解析器示例:
enum token {IF, THEN, ELSE, BEGIN, END, PRINT, SEMI, NUM, EQ};
extern enum token getToken(void);
enum token tok;
void advance() {tok=getToken();}
void eat(enum token t) {if (tok==t) advance(); else error();}
void S(void) {switch(tok) {
case IF:
eat(IF); E(); eat(THEN); S();
eat(EL
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



