7

解析 C++ 的问题是众所周知的。它不能纯粹基于语法来解析,它不能作为 LALR 来完成(不管这个词是什么,我不是语言理论家),语言规范是无数页等等。出于这个原因和其他原因,我'正在为我的个人项目决定另一种语言。

Vala 看起来是一门很好的语言。尽管提供了对 C++ 的许多改进,但解析起来是否同样麻烦?或者它是否有一个简洁、合理长度的形式语法,或一些逻辑描述,适合为编译器、源分析器和其他工具构建解析器?

不管答案是什么,这是否适用于 Genie 替代语法?

(我也想知道 D 和其他后 C++ 非 VM 语言,尽管不那么强烈。)

4

2 回答 2

8

C++ 是常用解析的最复杂(如果不是最复杂)的编程语言之一特别困难的是它的名称查找规则和模板实例化规则。使用 LALR(1) 解析器(例如 Bison 和 Yacc 生成的解析器)无法解析 C++,但它绝对是可解析的(毕竟,人们每天都使用解析 C++ 没有问题的解析器)。(事实上​​,早期版本的 G++ 是建立在 Bison 的广义 LR 解析器框架之上的,实际上不是,见评论)在最近被手写递归下降解析器取代之前)

另一方面,我不确定我看到 Vala 对 C++ 提供了哪些“改进”。这些语言试图实现相同的目标。另一方面,您可能不会在使用 Vala 接口编写的 GTK+ 之外找到太多内容。您将对其他所有内容使用 C 接口,这确实违背了使用这种语言的意义。

如果您因为 C++ 的复杂性而不喜欢 C++,那么考虑使用 Objective-C 可能是个好主意,因为它是 C 的简单扩展(如 Vala),但有一个更大的程序员社区供您使用鉴于它是 Mac 领域一切的基础。

最后,我不明白为什么解析语言本身的困难与程序员为了使用该语言应该关心什么有关。只是我的2美分。

于 2010-11-27T05:25:55.373 回答
6

这很简单。您可以使用 libval​​a 进行解析、语义分析和代码生成,而不是自己编写。

于 2010-12-08T11:12:55.833 回答