BISON表格

http://smth.edu.cn/pc/pccon.php?id=1344&nid=103473&tid=7076

 

bison的实现中用到的表格:

  1. yyrhs 和yyprhs一起表示产生式右端文法串,是一个用-1隔开的索引串大数组,串的内容是文法符号的编号
  2. yyr1 产生式左端文法符号的编号
  3. yyr2 产生式右端长度
  4. yyrline 产生式的定义行
  5. yyprhs 和yyrhs一起表示产生式右端文法串,内容为右端在yyrhs中的起始位置
  6. yytname 文法符号的名称,必须用YYDEBUG条件编译
  7. yytranslate 把flex返回的token编号翻译成bison的文法编号
  8. yytoknum flex返回的token编号翻译成bison的token编号
  9. yytable DFA状态转移表
  10. yycheck 和yycheck等长的数组
  11. yypgoto 非终结符号上的goto下个状态
  12. yypact Index in YYTABLE of the portion describing STATE-NUM.
  13. yydefact 缺省动作,长度为DFA的状态个数
  14. yydefgoto 缺省goto,长度为非终结符号

实 际上BISON就是给我们造表,至于怎么用这个表是我们的事,这些好比是个瓤子,在这个瓤子外头套个毛衣,一个翻译程序就出来了。当然一般来说都是直接用 嵌在BISON里头的毛衣,这样就得到一个LALR(1)分析程序,BISON程序多半支持一个``-S''参数可以用来切换毛衣。

想 了想,明白为什么昨天搞的那个parse tree那么庞大了,因为那个语法是从c99手册扒出来的一点都没有改造过。c99为了严谨用的是优先级级联的无二义性的文法(所以c99里头用不着说明 什么优先级了),这个文法的毛病就是实现太不方便,太多的单一产生式(右端只有一个文法符号的产生式),所以parse tree打印出来就成了一个个很大的锯齿。反观gcc的语法文件就很不一样,引入优先级说明之后,文法变的很简单,所以分析树也得到了简化。

你可能感兴趣的:(c,Flex,gcc,token)