C语言实现的编译原理语法分析程序中语法规则的存储

最近在做编译原理课的语法分析词法分析等程序,遇到的第一个问题就是如何存储语法规则,我把我的想法贴出来,可能并不是很合理,不过给有兴趣的人做一个参考。

  1. typedef struct RuleNode {
  2. int Number;
  3. char Left;
  4. char * Right;
  5. int RightNum;
  6. int RightNumMax;
  7. } 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: , ,

断了光缆真不是好事

卡巴不能升级。

WP的akismet插件连不上服务器,工作好像不正常。

MSN、Live.com、Gmail等一干国外服务有问题。

Pconline上居然出现了抢手文章,严重鄙视!(参见:《绝招!即使世界上的光缆都断了,依然可以访问网页》

中国电信说到1月15号可以修好,但愿如此……

最后,今天是1月1日,在此纪念一下一个对我非常非常重要的故人……Miss you forever……

Tags:
    主题制作者:Directory JournalElegant Directory