Skip to content

linprophet/LL1-parser

Repository files navigation

LL1-parser

a simple parser based on LL1

文法输入

  • 从txt中读取,空用@符号表示

文法改写

  • 支持消除直接左递归
  • TODO:支持提取直接左因子

生成First集

  • 右侧开头的终结符都在First中
  • 右侧有ε,则ε也在First中
  • First中包括右侧开头的非终结符的first集
  • 如果是符号串X1X2X3,则若X1能推导出ε,则将X2的First也加进去

生成Follow集

  • 先添加$到起始符号的Follow集中
  • 遍历右边的非终结符,将其右侧的终结符添加到Fellow集合
  • 遍历右边的非终结符,将其右侧的非终结符的First集添加到Fellow集
    • 注意如果First中有空的话,其后的非终结符的First集也添加,依次
  • 如果右边的最后一个为非终结符,将左部的Fellow集添加到右侧结束的非终结符的Fellow集中
    • 如果是最右是符号串X1X2X3,则若X3能推导出ε,则将Y的FOLLOW也加到X2里面去

生成LL1分析表

  • 对每个产生式,如果打头是终结符,直接填入对应项
  • 如果打头是非终结符,将其填入First集终结符的每一项
  • 如果First中还包括了空,那么把FOLLOW集也加入

如果不满足LL1文法,也即一个格内填入了两项,会报错

分析表可导出为xlxs

预测分析

分析同时构造语法树

token从外部文件读入

同属连接,来连接同一层级的兄弟结点

打印语法树时,缩进的深度代表从属关系

About

a simple parser based on LL1

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages