a simple parser based on LL1
- 从txt中读取,空用@符号表示
- 支持消除直接左递归
- TODO:支持提取直接左因子
- 右侧开头的终结符都在First中
- 右侧有ε,则ε也在First中
- First中包括右侧开头的非终结符的first集
- 如果是符号串X1X2X3,则若X1能推导出ε,则将X2的First也加进去
- 先添加$到起始符号的Follow集中
- 遍历右边的非终结符,将其右侧的终结符添加到Fellow集合
- 遍历右边的非终结符,将其右侧的非终结符的First集添加到Fellow集
- 注意如果First中有空的话,其后的非终结符的First集也添加,依次
- 如果右边的最后一个为非终结符,将左部的Fellow集添加到右侧结束的非终结符的Fellow集中
- 如果是最右是符号串X1X2X3,则若X3能推导出ε,则将Y的FOLLOW也加到X2里面去
- 对每个产生式,如果打头是终结符,直接填入对应项
- 如果打头是非终结符,将其填入First集终结符的每一项
- 如果First中还包括了空,那么把FOLLOW集也加入
如果不满足LL1文法,也即一个格内填入了两项,会报错
分析表可导出为xlxs
分析同时构造语法树
token从外部文件读入
同属连接,来连接同一层级的兄弟结点
打印语法树时,缩进的深度代表从属关系