摘要: 1 /* 2 * LR 转换表 3 * + Goto 记录表 4 * + 状态转换表 5 */ 6 #include 7 #include 8 #include 9 10 #include "Common.h" 11 #include "Closure.h" 12 #include "LRCal.h" 13 #include "LRMigrate.h" 14 15 extern char *Grammer[]; 16 extern char ***GrammerRule; 17 18 /* 19 * 创建Goto记 阅读全文
posted @ 2013-08-31 10:50 RexfieldVon 阅读(1067) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 * 该程序用于计算语言的核心项集 3 * RexfieldVon 4 * 2013年8月24日21:19:25 5 */ 6 #include 7 #include 8 #include 9 #include 10 11 #ifndef bool 12 # define bool char 13 #endif 14 15 #ifndef true 16 # define true 1 17 #endif 18 19 #ifndef false 20 # define false 0 21 #endif 22 23 #d... 阅读全文
posted @ 2013-08-24 21:39 RexfieldVon 阅读(587) 评论(0) 推荐(0) 编辑
摘要: 该算法用于将一组乱序的字符串反序列化到一个Trie树中,这个过程即可视为对字符串进行了一次排序。还可以通过调用GetFeatureString 将该 Trie 树重新序列化。 1 #include 2 #include 3 #include 4 5 #ifndef bool 6 # define bool char 7 #endif 8 9 #ifndef true 10 # define true 1 11 #endif 12 13 #ifndef false 14 # define false 0 15 #endif 16 17 #defi... 阅读全文
posted @ 2013-08-24 21:17 RexfieldVon 阅读(391) 评论(0) 推荐(0) 编辑
摘要: 一开始,我为了偷懒将所有的任务全都压在了一个浮动指针上: 1 for (; CCPtr->S != NULL; CCPtr->S = CCPtr->S->next) // for each x following a · in an item in CCi 2 { 3 char *Placeholder = strchr(CCPtr->S->Expression, '\376'); 4 if (Placeholder != NULL && *(Placeholder + 1) != '\0') 5 { 阅读全文
posted @ 2013-08-24 16:37 RexfieldVon 阅读(250) 评论(0) 推荐(0) 编辑
摘要: import类,而不是import整个包在很多语言里,这通常是一种被推荐的做法,有些甚至是必须的。如果是在C++里,这还算是有点意义,因为更少 #include 意味着更快的编译速度,然而,这种意义仅体现在需要花很长时间去编译的大型项目中。而对很多像Java这样的语言,这毫无意义。因为它不影响编译的时间,所有你得到的回报只是花更多的努力来维护你的import语句。虽然IDE可以帮助你做这些事情,但你仍然需要时不时的多点几次鼠标/键盘,在版本控制系统里多留几条变更记录,干扰你的代码审查。有什么实际用处?向官僚机构表明代码很规范,无它用途。面向接口编程这项编程法则要求程序员定义接口,并针对接口来编 阅读全文
posted @ 2013-08-17 09:32 RexfieldVon 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 * 该程序用于计算某个项集的Goto集 3 * RexfieldVon 4 * 2013年8月11日2:34:50 5 */ 6 #include 7 #include 8 #include 9 10 #ifndef bool 11 # define bool char 12 #endif 13 14 #ifndef true 15 # define true 1 16 #endif 17 18 #ifndef false 19 # define false 0 20 #endif 21 22 struct Collec... 阅读全文
posted @ 2013-08-11 02:37 RexfieldVon 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 * 该程序用于计算某个产生式的闭包 3 * RexfieldVon 4 * 2013年8月9日16:01:38 5 */ 6 #include 7 #include 8 #include 9 10 #ifndef bool 11 # define bool char 12 #endif 13 14 #ifndef true 15 # define true 1 16 #endif 17 18 #ifndef false 19 # define false 0 20 #endif 21 22 struct Collecti... 阅读全文
posted @ 2013-08-10 23:33 RexfieldVon 阅读(1167) 评论(0) 推荐(0) 编辑
摘要: 当LR语法分析器在查询语法分析动作表并发现一个报错条目时,它就检测到了一个语法错误,在查询GoTo表时不会发现语法错误,如果当前已扫描的输入部分不可能存在正确的后续符号串,LR的输入符号语法分析表就会立刻报错。但绝不会把一个错误的输入符号移入到栈中。(1)恐慌模式 恐慌模式的错误恢复策略: 我们从栈顶向下扫描,直到发现某个状态s,它有一个对应于某个非终结符A的GoTo目标,然后我们丢弃零个或多个输入符号,直到发现一个可能合法地跟在A之后的符号a为止,之后语法分析器将GoTo(s,A)压入栈中,继续进行正常的语法分析。(2)短语层次的错误恢复 实现短语层次的错误恢复策略:检查LR语法分... 阅读全文
posted @ 2013-08-04 17:29 RexfieldVon 阅读(1520) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 * 该程序用于计算某个非终结符的 FIRST+ 集合 3 * RexfieldVon 4 * 2013年6月30日16:02:47 5 */ 6 #include 7 #include 8 #include 9 10 /* 三级指针 11 * 第一级指向整个产生式组 12 * 第二级指向单个产生式 13 * 第三级指向产生式符号单元 14 * 约定:所有的大写字母为非终结符 15 * 假设:无左递归、FIRST集中不会出现重复符号 16 */ 17 char*** GrammerRule; 18 19 /* 20 * 初始化文法... 阅读全文
posted @ 2013-07-03 23:26 RexfieldVon 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 1 /* 2 * 该程序用于计算某个非终结符的 FOLLOW 集合 3 * RexfieldVon 4 * 2013年6月30日16:02:47 5 */ 6 #include 7 #include 8 #include 9 10 /* 三级指针 11 * 第一级指向整个产生式组 12 * 第二级指向单个产生式 13 * 第三级指向产生式符号单元 14 * 约定:所有的大写字母为非终结符 15 * 假设:无左递归、FIRST集中不会出现重复符号 16 */ 17 char*** GrammerRule; 18 19 /* 20 * 初始化文法... 阅读全文
posted @ 2013-06-30 22:03 RexfieldVon 阅读(502) 评论(0) 推荐(0) 编辑