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