在查看用 C++ 编写的软件 (openFOAM) 的语言时,我注意到了一些东西。就像,
field value;
例如,
temperature 25;
我想知道这是如何工作的。我的意思是如何在不使用等号的情况下将温度设置为 25。任何的想法?
因为 openFOAM 有一个解析器可以理解这种格式。
这样的解析器并不难制作,而 C++(在 yacc、bison 等解析器生成器工具的帮助下)是解析器的流行选择,因为它可以非常快。
C++ 是图灵完备的语言,因此它可以做任何其他语言可以做的任何事情。具体来说,它可以处理看起来不像 C++ 代码的数据。
编程语言通常是上下文无关的。如果语言是上下文无关的,它可以被解析(我不会说它是微不足道的,但这是一个以前已经解决过很多次的问题,如果你学习编译器类,你将不得不为简单的语言做它)。
解析器只是在寻找格式的声明field value;
。似乎没有发生类型检查,所以它只是在分号上拆分然后在空格上。如果您有兴趣了解解析源代码,请阅读有关解析无上下文语言、下推自动机和无上下文语法的内容。