C# 用c编写解析器的最佳/最快方法#

C# 用c编写解析器的最佳/最快方法#,c#,parsing,abstract-syntax-tree,C#,Parsing,Abstract Syntax Tree,用c语言构建解析器以解析我自己的语言的最佳方式是什么? 理想情况下,我希望提供语法,并将抽象语法树作为输出。 非常感谢,, Nestor您可以学习的源代码。我在这方面有很好的经验。到目前为止,最大的好处是它可以让您编写具有无限前瞻性的LL(*)解析器,这些语法可以是非常不理想的,但是语法可以以最直接和自然的方式编写,而不需要重构来解决解析器限制,而且解析器性能通常不是什么大问题(我希望您不编写C++编译器),尤其是在学习项目中 它还提供了非常好的方法,无需编写任何代码就可以构造有意义的代码——对

用c语言构建解析器以解析我自己的语言的最佳方式是什么? 理想情况下,我希望提供语法,并将抽象语法树作为输出。 非常感谢,,
Nestor

您可以学习的源代码。

我在这方面有很好的经验。到目前为止,最大的好处是它可以让您编写具有无限前瞻性的LL(*)解析器,这些语法可以是非常不理想的,但是语法可以以最直接和自然的方式编写,而不需要重构来解决解析器限制,而且解析器性能通常不是什么大问题(我希望您不编写C++编译器),尤其是在学习项目中

它还提供了非常好的方法,无需编写任何代码就可以构造有意义的代码——对于每一个语法产品,您都会指出“关键”标记或子产品,这将成为一个树节点。或者,您可以编写一个生成树

看看下面的ANTLR语法(这里按复杂性增加的顺序列出),以了解它的外观和感觉

  • -与树制作

虽然它还处于早期测试阶段,但微软的建模语言和MGrammar工具显示出了一些希望。

我玩过wtih。它看起来既简单又有用。

我还想看看。创建EBNF语法非常容易。这是一个简单的C#计算器示例。

Lex和yacc仍然是我的最爱。如果你刚刚开始,你会觉得很难懂,但是一旦你掌握了行话,你会觉得非常简单、快速和容易

你可以让它做任何你想做的事;生成C代码、构建其他语法、模拟指令等等

它并不漂亮,它是基于文本的格式和LL1,所以您的语法必须适应它


好的一面是,它无处不在。O'reilly有很多关于它的好书,很多示例代码,很多预制语法,还有很多本地语言库。

这里有一篇关于构建LL(1)解析器的短文,当然你也可以使用生成器。

谢谢。我不是要为c编写解析器,而是为我自己的语言编写解析器,解析器是用c编写的。谢谢你的建议,是的。我看到了。。我喜欢编辑器(根据语法调整语法突出显示)。但是现在使用它还为时过早。。看起来。@Nestor-我同意现在使用它还为时过早,但我认为值得一提。+1供您评论。这是真的。如果奥斯陆是最终版本的话,我会使用它。讽刺的一个很好的方面(至少我认为)是,你可以用c这样的语言编写语法#