【发布时间】:2011-11-14 16:41:02
【问题描述】:
如何在 C# 中编写解析器(递归下降?)?现在我只想要一个简单的解析器来解析算术表达式(并读取变量?)。虽然后来我打算写一个 xml 和 html 解析器(用于学习目的)。我这样做是因为解析器有用的东西范围很广:Web 开发、编程语言解释器、内部工具、游戏引擎、地图和瓷砖编辑器等。那么编写解析器的基本理论是什么,我该怎么做在 C# 中实现一个? C# 是解析器的正确语言吗(我曾经用 C++ 编写了一个简单的算术解析器,它很高效。JIT 编译是否同样好?)。任何有用的资源和文章。最重要的是,代码示例(或代码示例的链接)。
注意:出于好奇,回答这个问题的人是否曾经在 C# 中实现过解析器?
【问题讨论】:
-
你想自己实现解析器,还是想使用一个库,它接受一个语法然后自己创建解析器?
-
ANTLR 是 .NET 社区中用于解析自定义语言的稳定器,尽管它会影响您的学习体验。
-
对于算术表达式解析器,我个人倾向于调车场。关于“有任何人” - 我已经完成了一些高度专业化的解析器,但我不知道用于 C# 的更通用的解析器生成器的可用性
-
在阅读了这篇文章 (cs.nott.ac.uk/~gmh/monparsing.pdf) 之后,我编写了我的第一个“真正的”解析器。它适用于函数式语言,但它应该提供一些关于如何设计可组合解析器的见解。
-
@TomTom,你错了。对于不同的语言,有非常不同的惯用方法。你不能在 Fortran 和 Haskell 中以同样的方式编写解析器。在 C# 中,您可以使用组合器,就像在真正的编程语言中一样,它对于某些语法来说是一种明智的方法。
标签: c# parsing xml-parsing interpreter