这是一系列问题的一部分,这些问题的重点是抽象项目的姐妹项目,该项目旨在以框架的形式抽象语言设计中使用的概念。姊妹项目称为OILexer,旨在从语法文件构造解析器,而不在匹配项上使用代码注入。
与这些问题相关的其他一些页面,与结构类型相关,可以在这里查看,以及在这里找到易用性。可以在此处找到与有关框架和适当发布位置的查询相关的元主题。
我现在要开始从给定的语法中提取解析树,然后是递归下降解析器,该解析器使用DFA识别前向路径(类似于ANTLR 4的LL(*)),所以我想我会打开它来获得洞察力。
在解析器编译器中,哪种功能比较理想?
到目前为止,这里是实现的简要概述:
- 范本
- 提前预测,知道在给定点上什么是有效的。
- 规则“非文字化”将规则中的文字取下来,并解析它们来自哪个标记。
- 非确定自动机
- 确定性自动机
- 简单的词法状态机,用于令牌识别
- 令牌自动化方法:
- 扫描-用于注释:注释:=“ / *” Scan(“ * /”);
- 减-对标识符有用:标识符:=减(IdentifierBody,关键字);
- 确保标识符不接受关键字。
- 编码-将自动化编码为基数N转换的X系列计数。
- UnicodeEscape:=“ \\ u” BaseEncode(IdentifierCharNoEscape,16,4);
- 使用十六进制4转换以十六进制形式对Unicode进行转义。此与:[0-9A-Fa-f] {4}之间的区别是使用Encode进行的自动化将所允许的十六进制值集限制为IdentifierCharNoEscape的范围。因此,如果给它\ u005c,则编码版本将不接受该值。这样的事情有一个严重的警告:谨慎使用。最终的自动化可能非常复杂。
- UnicodeEscape:=“ \\ u” BaseEncode(IdentifierCharNoEscape,16,4);
没有实现的是CST生成,我需要调整确定性自动化以继承适当的上下文才能使此工作正常进行。
对于感兴趣的人,我已经上传了T *y♯项目原始形式的漂亮印刷品。每个文件都应该链接到其他文件,我开始链接各个规则来遵循它们,但是这花了太长时间(自动化起来会更简单!)
如果需要更多上下文,请相应地发布。
编辑5-14-2013:我已经编写了代码,可以在给定语言下为状态机创建GraphViz图。 这是AssemblyPart的GraphViz有向图。语言描述中链接的成员在其相对文件夹中应具有rulename.txt,以及该规则的图。自从我发布示例以来,某些语言描述已更改,这是由于简化了语法。这是一个有趣的graphviz图像。