C语言实现的编译原理语法分析程序中语法规则的存储
最近在做编译原理课的语法分析词法分析等程序,遇到的第一个问题就是如何存储语法规则,我把我的想法贴出来,可能并不是很合理,不过给有兴趣的人做一个参考。
- typedef struct RuleNode {
- int Number;
- char Left;
- char * Right;
- int RightNum;
- int RightNumMax;
- } RNode, *RNPtr;
typedef struct Rule {
int Number;
int MaxNum;
RNPtr * AllRule;
} Rule;
我使用的方法中,定义了两种结构体。
第一个是struct RuleNode,这个结构体是存储单句的语法规则的,其中包括:
int Number ——存储此句语法规则的编号(程序写到现在觉得似乎可以省略此项)
char Left ——存储“->”符号左边的表达式,我的程序比较简单,规定了这里只能是一个字母,所以用char,但是事实上应该不止一个非终结符,每个也不只一个字母,所以也许应该用char**或者cstring[]?
char * Right ——存储“->”右边的表达式,还是和上面一样规定了一个字符只能是一个字母组成,应该改成char**。
int RightNum ——存储Right指针后有几个连续空间存储字符。
int RightNumMax ——动态分配空间给Right时的空间大小,若RightNum达到这个数,就realloc。
第二个结构体是struct Rule,这个就很简单了,一个动态分配空间的数组存储指向每个规则结点的指针,另外两个是个数和最大值~
以上只是我一点不成熟的想法,希望能够对需要的人有帮助。
Tags: C/C++ , Study , 编译原理