我试图理解语言翻译是如何工作的。你们能指点一下口译员的工作原理吗?
我的意思是,假设我有一些像这样写的行
10 x = 200;
20 for r = x to 1000 step 1
25 z = r + 32;
30 print z;
40 next r;
50 end;
构建可以运行类似的解释器的最佳方法是什么?
有一个包含所有允许的函数并搜索匹配的大矩阵?第一行,例如:它为变量x分配200,但这些是不存在的符号。
如果你们能给我这个方向......
感谢您的帮助。
答案 0 :(得分:3)
编译器创建是一个复杂的主题(解释器可以看作是一个特殊的编译器)。
你必须首先解析它 - 尝试理解语法,然后创建一些内部表示(抽象语法树),然后创建一些执行逻辑。
答案 1 :(得分:1)
也许你在谈论创建DSL。 您可能会发现这很有用(如果您可以花费$$)
http://gilesbowkett.blogspot.com/2010/03/create-your-own-programming-language.html
答案 2 :(得分:1)
了解lex/flex和yacc/bison等工具。这些是在开放软件世界中构建编译器的最流行的工具。许多着名的开源程序都是用它们编写的(包括PHP,gcc,doxygen)。你会发现很多免费的书籍和教程。他们不仅展示了如何使用lex和yacc工具,还解释了编译器背后的一般思想。
答案 3 :(得分:1)
我也有兴趣了解更多这方面的内容。我发现Douglas Crockford的JavaScript parser很有意思,但据我所知,他使用的方法与解析语言的方法不同。这不是解释和编译的全貌,但我发现看到一些实际的解析实现以及由此产生的代码重组是有帮助的。
答案 4 :(得分:1)
你可以在http://goldparser.org找到一个开源的'Gold Parsing System'。 :)
在他们的网站上也有一些解释的概念,你可以在那里学习一些基本的过程基础。
答案 5 :(得分:1)
我知道这是一个旧帖子,但大多数相关问题都标记为重复或已关闭。所以,这是我的两分钱。
我很惊讶没人提到xtext。它以Eclipse plugin和IntelliJ plugin提供。它不仅提供像ANTLR这样的解析器,还提供DSL所需的整个管道(包括解析器,链接器,类型检查器,编译器)。您可以在Github上查看它的源代码,以了解解释器/编译器的工作原理。