是C#被认为是上下文无关语言?(Is C# considered a context free la

2019-07-03 22:14发布

我一直在寻找这一点,但有很多不同的答案对这个问题MSDN论坛 。

有人说,“所有的计算机语言文法上下文”和其他人说, 有空白敏感的语法任何一种语言是可能的上下文敏感的,因此没有上下文 (F#和Python)。

是对子级很好的一个明确的答案 ,也许一些证据。

Answer 1:

我会形容C#作为具有上下文无关文法,但语言有没有在语法表达的上下文相关规则。

维基百科( 正式语法 ):

上下文无关文法是一语法,其中每个生产规则的左手侧仅由单个非终结符的。

从C#4.0规范,第2.2.1节(语法表示法):

词法和句法文法用文法产生呈现。 每个语法产生式定义的非末端符号和非终端符号的可能的扩展成非终端或终端的符号的序列。

当我读它,这意味着定义的C#语言的产生式规则是上下文无关。 每个生产规则的左手侧是单非末端符号。 与此相反,一个上下文相关的语法可能对产生式规则的左手侧的多个终端和非终端符号。

有,但是,在说明书中的许多规则是上下文敏感的。 例如,“A局部变量必须被明确在要获得其值的每个位置分配(第5.3节)。” 此外,“一个方法的签名必须是在该方法被声明的类是独一无二的。” 这是两种情况下任何特定片段的有效性取决于它出现的背景。

当然,很多编程语言有类似的要求,其中包括C.我最怀疑会考虑下的上下文敏感的语言。 我觉得这个答案总结得好:

该组是语法正确的程序是免费的背景下,几乎所有的语言。 的一套编译程序是不是免费的情况下,对几乎所有的语言。

至于Python和F#,正如我在我的评论说,这些语言通常被描述为具有语义(或有时语法)空白没有上下文敏感。



文章来源: Is C# considered a context free language?