我想知道语法规范和语义分析之间的界限在哪里。更好的是:使用详细的语法描述或留下语义阶段的详细信息?例如:想象一个像c#一样带有枚举类型的OO语言,可以从原始类型中“得出”

enum X : int { a = 1 }

现在,枚举的基本类型的正确性(在这种情况下:原始或非主要类型)是否是语法检查或语义分析的主题?

有帮助吗?

解决方案

这是一个非常广泛的问题。还有很多其他考虑因素,因此很难简单地说一种策略在所有情况下都比另一种策略更好。这取决于您的目的和其余语言的定义。如果该语言的其他部分本质上是句法的(并且必须使用语义信息对歧义),那么显然有必要执行任务作为语义分析的步骤。

也就是说,我是尽早捕获所有错误的粉丝。如果您的语言和目标允许您在不需要任何语义分析拒绝无效程序的情况下解析您的输入的完全明确的语义表示,那么我相信这将是迄今为止最好的方法。

基本上,您肯定会平衡自己尽早拒绝错误程序的能力,而语法和解析器的复杂性以及语法描述和语义分析阶段之间的努力重复。我不相信有可能说以一种方式做事比另一种更好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top