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