![]() |
1
4
1.我想说的主要优势是 维修性 --对语言做一点小小的改变只意味着对语法做一个相应的小小的改变,而不是对代码中可能与你想要的改变有关的各个点进行细微的修改…数量级:生产效率更高,错误风险更小。
2。3.除了你已经发现的以外,我不能提出太多建议(我主要使用python和
|
![]() |
2
4
以下是我对你(非常好)的问题的看法:
gof解释器模式是编写“小语言”的另一种技术。看看那个。 |
![]() |
3
2
Let's Build A Compiler 是关于如何编写简单编译器的逐步教程。代码是用delphi(pascal)编写的,但它足够基本,可以轻松地翻译成大多数其他语言。 |
![]() |
4
2
我将认真研究haskell中基于一元组合的解析(通常也处理词汇分析)。我发现它让人大开眼界;使用这个方法从头开始构建解析器是多么的容易。实际上,编写自己的解析器比使用现有的库要快得多,这是非常简单的。 最著名的例子可能是 Parsec 它有一个好的 user guide 这就解释了如何使用它。此库有到其他语言的端口列表(包括 C++ 和 Ruby 列在 Parsec page of the Haskell wiki 尽管我不熟悉它们,所以我不能说它们与在Haskell中使用Parsec有多接近。 如果您想了解这些如何在内部工作以及如何编写自己的代码,我建议从GrahamHutton的第8章(“函数解析器”)开始。 Programming in Haskell . 一旦你很好地理解了这一章(这可能需要阅读好几篇),你就可以开始了。 |
![]() |
5
1
在Perl中,Parse::RecDescent模块是第一个开始的地方。将教程添加到模块名中,Google应该能够找到很多教程来帮助您开始学习。 |
![]() |
6
1
使用bnf、ebnf或类似的东西定义语法更容易,以后您将有更好的时间来维护它。此外,您还可以找到许多语法定义的示例。最后但同样重要的是,如果你想和其他人讨论你的语法,最好是你都说同一种语言(bnf,ebnf等)。 编写自己的解析代码就像重新设计方向盘,很容易出错。它的可维护性也较低。当然,它可以更灵活,对于小型项目来说,它也可能是一个不错的选择,但是使用一个现有的语法分析器生成器并吐出代码应该可以满足我们的大部分需求。 对于C++,我也会建议LEX/YACC。对于Ruby来说,这看起来是一个不错的选择: Coco/R(uby) |
![]() |
7
1
有趣的时机:今天早上我花了很多时间想知道状态机和解析器,并试图弄清楚我如何能更多地了解它们。 第二,你可以看看 Ragel (它对C++和露比有好处)。 |
![]() |
8
1
这里有一个关于独立的教程(10页!),完全可移植的编译器编译器 可用于快速设计和实现“低开销”DSL: http://www.bayfronttechnologies.com/mc_tutorial.html 这个网站会带你浏览瓦尔·斯科雷1964年发表的关于MetaII的论文。 是的,1964。这太神奇了。这就是我学习编译器的方法 回到1970。 |