05 2012 档案
摘要:译自stackoverflow,一个很有意思的问题。问题:string str = "abcdefgdcb";cout < < sizeof(str.substr(0,3).c_str());For some reason, the above string is giving me 8. I assumed c_str() returns a null string,由于某些原因,上面的这个字符串得到的结果是8,我估计c_str()返回了一个null,and sizeof uses the null to determine the size of the s
阅读全文
摘要:经过前面两篇文章。已经讲清楚了LR语法分析中最重要的分析表的构造过程。先补充一个小问题,就是LR(0)项目的分类 根据圆点所在的位置和圆点后是终结符还是非终结符或为空把项目分为以下几种: 移进项目: 形如 A→α .a β ,a是终结符, a ,b∈V* 以下同 待约项目:A→α .B β ,其中B是非终结符 归约项目:A→α . 表明产生式已分析完成。 接受项目:形如 S’→S . 特别的。A→ε的LR(0)项目只有A→ • 是归约项目 因为LR分析表的构造前面两篇文章已经讲的很清楚了,所以这个题目重要是解释一下如何使用分析表来构造,分析表的构造也许你得...
阅读全文
摘要:上篇文章中,我已经说到了,LR(0)分析表是LR(0)分析器的重要组成部分,它是总控程序分析动作的依据,他是由LR(0)项目集规范族来进行构造的。他的结构主要有两个部分ACTION 和GOTO 先看看指导原则,可以直接跳过,看例题的时候可以返回来对照参考。 假设已构造出LR(0)项目集规范族为:C={I0,I1, … , In},其中Ik为项目集的名字,k为状态名,令包含S′→·S项目的集合Ik的下标k为分析器的初始状态。那么分析表的ACTION表和GOTO表构造步骤为: ① 若项目A→α·aβ属于Ik且转换函数GO(Ik,a)= Ij,当a为终结符时则置ACTION[k,
阅读全文
摘要:此文略长。我也没想到这写起来这么多,但对构造过程绝对清楚,一步步慢慢看吧。 LR的第一个L和LL的第一个L含义相同,即从左到右扫描句子 ,第二个R表示Right most最右推导。 在通常的描述中,后面还有一个括号里面的数字如,LR(0)、LR(1)这样,括号里面的数字表示用于决策所需的后续token分词数。 首先看一下LR分析器的模型图 可惜看出,LR分析器最关键的部分就是 LR分析表了,而LR分析表的构建是由已构造出的LR(0)项目集规范族来进行构造的。LR分析法貌似是不要求掌握的,而且这部分比我想象的还要复杂,今天看了好多。才勉强搞清楚这个项目集规范族...
阅读全文