![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
文章平均质量分 78
VeronicaZhu
这个作者很懒,什么都没留下…
展开
-
lex+yacc 构造语法树(三)
lex.l 和yacc.y文件都准备好之后,接下来就是打印的工作了。构建的语法树实际上是兄弟父子树,每个节点的左节点为自己的大儿子,右节点为与自己相近的兄弟节点。兄弟父子树是通过insert函数来构建的:void insert(struct Node *parent,struct Node *child){ struct Node *p; if (child==NULL)原创 2014-02-05 01:10:16 · 4218 阅读 · 1 评论 -
lex+yacc 构造语法树(一)
本文章是基于一种为 small C语言的语法规则,通过lex和yacc编写归约规则,使得当输入一个合法程序的时候,输出基于归约规则和语法规则的语法树,该语法树的表现形式为缩进,同列的元素为兄弟节点,往右推进一列的元素为儿子节点。假定small C的语法规则如下:INT => /* integer 1*/ID => /* identier2*/SEMI => ;COMMA =>原创 2014-02-04 22:21:42 · 7241 阅读 · 2 评论 -
lex+yacc 构造语法树(二)
上一章我们已经写好了lex.l文件,接下来我们还要根据归约规则来确定所得到的token是由上一级的哪些token展开而成。我们需要构造的small C语言的语法规则如下:归约规则的声明格式参照yacc的格式,需要注意的是声明符号的左结合或右结合的时候要注意符号的优先级。%{#include #include #include #include "lex.yy.c"原创 2014-02-04 22:47:34 · 5325 阅读 · 1 评论