随笔分类 -  编译原理

摘要:在沉默了数月之后,博主心血来潮想继续介绍QParserGenerator,在这里我们将不再继续介绍任何有关于LALR(1)的算法(那东西只会把你的脑子变成一团浆糊),让我们来看一下QParserGenerator的具体用法。说到ParserGenerator不得不提的是BNF,应此QParserGenerator也有它自己的BNF,这时有人会问BNF究竟是什么呢?简单的说BNF就是用来描述一种语法的东西,比如在Basic中If后面跟表达式然后是Then中间是语句块末尾必须要有End If等等的一系列描述,更专业的解释我们可以看一下维基百科上的解释。好了,说完了BNF那让我们来看一下QParse 阅读全文
posted @ 2013-10-09 11:19 lwch 阅读(1258) 评论(0) 推荐(0) 编辑
摘要:接上一篇,首先需要修正的是在DFA生成算法中的传播部分,应该需要有个循环一直传播到不能传播为止,在多次实验中表明,有些展望符是通过第2,3,4甚至更多次传播得来的。应此,相应的make函数变成了Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> boolLALR1::make(){vector<LALR1Production>v;v.push_back(inputProductions[begin][0]);pStart=closu 阅读全文
posted @ 2013-05-30 23:07 lwch 阅读(736) 评论(0) 推荐(0) 编辑
摘要:以下所说的文法文件均为QParserGenerator的文法文件产生式我们将文法文件中形如Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->strings->strings"{String}"|"{String}";形式的式子称为产生式,它由它的左端非终结符(strings)和右端终结符和非终结符组成。非终结符:非终结符总是出现在产生式的左端,它表示这个条目是由右侧的一些终结符和非终结符推导而来的。 阅读全文
posted @ 2013-05-12 22:37 lwch 阅读(1215) 评论(0) 推荐(1) 编辑
摘要:接上一篇我们已经得到了一个完整的ε-NFA,下面来说说如何将ε-NFA转换为DFA(确定有限自动机)。DFA的状态在DFA中,某个状态对应到ε-NFA中的若干状态,应此我们将会得到下面这样的一个结构。 struct DFA_State { set<EpsilonNFA_State*> content; bool bFlag;#ifdef _DEBUG uint idx;#endif DFA_State(con... 阅读全文
posted @ 2013-02-23 23:34 lwch 阅读(3044) 评论(0) 推荐(1) 编辑
摘要:自动机关于自动机的说明,这里不不再复述,请到http://zh.wikipedia.org/wiki/自动机查看。表达式首先,我们规定表达式中只允许输入Char_Type和String_Type类型的字符。template <typename Char_Type, typename String_Type>class Rule{};ε-NFA的状态对于一个状态来说,我们并不需要知道他的任何信息在上面的代码中,为了调试方便,我为其加入了idx域,并为每个状态分配了一个唯一的ID。 struct EpsilonNFA_State {#ifdef _DEBUG ... 阅读全文
posted @ 2013-02-15 20:33 lwch 阅读(3670) 评论(3) 推荐(1) 编辑

点击右上角即可分享
微信分享提示