gpt4 book ai didi

antlr - "Human-readable"ANTLR 生成的代码?

转载 作者:行者123 更新时间:2023-12-04 04:59:04 26 4
gpt4 key购买 nike

我已经学习ANTLR几天了。我学习它的目标是我将能够生成解析器和词法分析器,然后亲自将它们从 Java 手动翻译成我的目标语言(C/C++/Java/C#/Python,没有工具支持它)。我选择 ANTLR 是因为从它的关于页面:ANTLR 被广泛使用是因为它易于理解、功能强大、灵活、生成 人类可读 输出[...]

在学习这个工具时,我决定从一个简单语法的简单词法分析器开始:JSON。但是,一旦我使用 ANTLR4 为这个词法分析器生成了 .java 文件,我就大吃一惊。我得到了一大堆远离人类可读的序列化代码,然后是:

    public static final ATN _ATN =
ATNSimulator.deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
}

一些谷歌搜索无法为我提供禁用此行为的方法。

有没有办法禁用这种行为并生成人类可读的代码,或者我是否必须为此目标编程语言手写我的词法分析器和解析器?

最佳答案

ANTLR 4 使用新算法进行预测。 Terence Parr 目前正在撰写一份详细描述该算法的技术报告。人类可读的输出是指生成的解析器。

ANTLR 4 词法分析器使用 DFA 识别器,与以前的 ANTLR 版本相比,速度和内存使用量有了巨大的改进。对于解析器,_ATN field 是在对 adaptivePredict 的调用中使用的数据结构。 (您会注意到生成的代码中调用该方法的行)。

您将无法手动将 ANTLR 4 词法分析器生成的 Java 代码转换为另一种编程语言。如果语法严格为 LL(1)(即生成的代码不包含对 adaptivePredict 的任何调用),您或许可以手动翻译生成的解析器的代码。但是,您将失去从序列化 ATN 中编码的信息中提取的错误恢复能力。

关于antlr - "Human-readable"ANTLR 生成的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16363155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com