上下文无关语言和上下文相关语言之间的区别已经在 C 的上下文中争论过。上下文无关语言的特点是语法规则,其中左侧仅由单个非终结符组成。另一方面,上下文相关语言允许左侧终端和非终端的任意组合。
消除上下文无关假设
虽然 C 看起来可能遵循上下文无关语言的约束,但仔细检查会发现事实并非如此。 C 中模板实例化的存在使事情变得复杂。模板实例化中涉及的计算允许根据程序的语义推导程序的语法。这引入了图灵完备的元素,使得 C 的语法本质上不受限制,超出了上下文无关和上下文相关语言的范围。
C 中的歧义
与流行的看法相反,C 语法中的歧义性并不是一个定义特征。最终,标识符的语法类别由其声明确定,从而导致依赖于识别程序中相同字符串的能力。这种能力无法封装在上下文无关或上下文相关的语法中。
解析 C 的实际意义
C 语法的复杂性对其具有重大影响解析。尝试编写能够解析 C 的上下文相关语法几乎是不可能的。即使制造一台图灵机来处理这项任务也将是一个难以克服的挑战。这就解释了为什么 C 标准避免提供完整的形式语法。
总结:C 的复杂语法
综上所述,C 的语法既不严格遵循上下文无关或上下文相关的分类。模板实例化引入了图灵完备性,使其语法超越了这些界限。因此,解析 C 仍然是一项复杂且具有挑战性的工作。
以上是C 真的是上下文无关的吗? 看看其复杂的语法和解析挑战的详细内容。更多信息请关注PHP中文网其他相关文章!