编译原理学习笔记02

编译原理学习笔记01

nonoob posted @ Sat, 30 Jun 2012 00:03:12 +0800 in Programming , 2053 readers

不懂编译原理没法在实验室混啊,开始写些流水帐笔记,目的只是为了重新补上这一课;仅代表个人知识水平,万不可因此而怀疑我的师兄和同学们>_<。参考教材Compilers: Principles, Techniques, and Tools(龙书)

-------------------------------------------------------

  1. Lexical analyzer生成token给parser用,分析过程还得和symbol table交互;在分析过程中需要干掉comments和whitespace(whitespace指的是blank,newline和tab或其他用于分隔token的东东,而不仅仅是空格)。

  2. token的样子是(token-name,attribute-value),其中attribute-value对保留字、操作符是不需要的;对于token-name是id的情况,attribute-value一般是指向其所在符号表中的项的pointer;对于数字这样的输入,可以让attribute-value表示对应的值,但实际一般还是用一个pointer指向表示它的字符串。

  3. lexeme是源程序中的具体字符序列;pattern是对模式的描述;token可看成对lexeme的泛化(类似于OO中的class)

           

  1. 识别lexeme时需要向前看几个字符(比如看到<有可能是<=或<);同时为减少io读取次数,使用双buffer。

  2. 每次需检查buffer终点并确定读入的字符是什么,为求统一使用sentinel(输入中不会出现的字符,如eof

  3. DFA$\subset$NFA,DFA初初始态不可为$\varepsilon$且每一个状态只有一个出边;DFA和NFA等价,可以类比群中的加法和乘法;其中DFA中的一个状态可看成NFA中的状态组成的集合(subset construction)。


Login *


loading captcha image...
(type the code from the image)
or Ctrl+Enter