我想知道语法规范和语义分析之间的界限在哪里。什么是更好的:使用详细的语法描述或留下语义阶段的细节?例如:想象一个像枚举类型的C#这样的OO语言,可以从基本类型“派生”
enum X : int { a = 1 }
现在,基本类型的枚举的正确性(在这种情况下:原始类型还是非原始类型)是否应该是语法检查或语义分析的主题?
答案 0 :(得分:2)
这是一个非常广泛的问题。还有很多其他的考虑因素,很难简单地说一种策略在所有情况下都胜过另一种策略。这取决于你的目的和其他语言的定义。如果语言的其他部分本质上在语法上是模糊的(并且必须使用语义信息消除歧义),那么显然有必要将任务作为语义分析的一步来执行。
那就是说,我是尽早发现所有错误的粉丝。如果您的语言和目标允许您解析输入的完全明确的语义表示而无需任何语义分析来拒绝无效程序,那么我相信这将是迄今为止最好的方法。
基本上,你肯定会平衡你的语法和解析器的复杂性以及语法描述和语义分析阶段之间的重复工作,尽早拒绝错误的程序。我不相信有可能说以一种方式做事比另一种更好。