【发布时间】:2010-12-10 23:21:20
【问题描述】:
我正在将基于 C# 的编程语言编译器从手动词法分析器/解析器迁移到 Antlr。
Antlr 一直让我头疼不已,因为它通常大部分有效,但也有一些小部分无法解决,而且解决起来非常痛苦。
我发现我的大部分头痛是由 Antlr 的词法分析器部分引起的,而不是解析器。然后我注意到parser grammar X; 并意识到也许我可以先手动编写词法分析器,然后再使用 Antlr 生成的解析器。
所以我正在寻找有关此主题的更多文档。我想自定义 ITokenStream 可以工作,但似乎几乎没有关于这个主题的在线文档......
【问题讨论】:
-
我的建议是可以借鉴现有的。但是,我只能找到使用 Antlr 的 NHibernate,而且用途相当有限。 :(
-
“但是还有一些小部分没有解决,而且解决起来非常痛苦” - 奇怪。语言的词法部分通常更容易实现。也许您可以解释一下哪些“小部件”给您带来了问题?
-
@Bart Kiers 我在实现范围和其他一些功能(例如 3.toString() 和 3.0.toString())时遇到了麻烦,其方式与常见问题解答中列出的方式不同。在手动创建的词法分析器中解决这类问题非常简单。
-
抱歉,我不知道“实现范围有什么问题”和“其他特性(例如3.toString()和3.0.toString()) " 的意思。我也不知道“他们的常见问题” 是什么。如果您不是在寻找在 ANTLR 中执行此操作的方法,则无需解释自己,但如果您有兴趣,请编辑您的原始问题,说明您无法在 ANTLR 词法分析器中做什么。
-
@Bart Kiers 现在,我找到了答案,所以我很满意。如果我确实想探索使用 Antlr 生成的词法分析器的可能性,那么我一定会发布一个单独的问题。但是,顺便说一句,“他们的常见问题解答”表示“Antlr 的常见问题解答”,范围表示“1..2”之类的东西,而 3.toString()/3.0.toString() 的意思正是:获取一个字段(或者,在这种情况下) 一个数字的方法,而没有 Antlr 可怕地死在 '.' 的多种可能含义上。
标签: c# antlr lexer parser-generator