Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 是锈';s语法是上下文无关的还是上下文敏感的?_Rust_Language Lawyer_Grammar_Chomsky Hierarchy - Fatal编程技术网

Rust 是锈';s语法是上下文无关的还是上下文敏感的?

Rust 是锈';s语法是上下文无关的还是上下文敏感的?,rust,language-lawyer,grammar,chomsky-hierarchy,Rust,Language Lawyer,Grammar,Chomsky Hierarchy,几乎没有任何编程语言的语法是规则的,因为它们允许任意深度嵌套的括号。生锈也会: let x = ((((())))); 但Rust的句法语法至少与上下文无关吗?如果不是,是什么元素使语法上下文敏感?或者语法甚至可以递归枚举,比如 相关:Rust包含一个宏处理器,其操作对上下文高度敏感 您可以尝试绕过这个问题,只进行语法分析,但不包括宏扩展(可能,但不是特别有用),或者假设宏扩展是由某个中间工具完成的,该工具被给予一个自由通行证,允许它图灵完成 但我倾向于说,这仅仅意味着Rust语言是递归可枚

几乎没有任何编程语言的语法是规则的,因为它们允许任意深度嵌套的括号。生锈也会:

let x = ((((()))));
但Rust的句法语法至少与上下文无关吗?如果不是,是什么元素使语法上下文敏感?或者语法甚至可以递归枚举,比如



相关:

Rust包含一个宏处理器,其操作对上下文高度敏感

您可以尝试绕过这个问题,只进行语法分析,但不包括宏扩展(可能,但不是特别有用),或者假设宏扩展是由某个中间工具完成的,该工具被给予一个自由通行证,允许它图灵完成

但我倾向于说,这仅仅意味着Rust语言是递归可枚举的

宏定义的有效性有许多限制,这可能使语言(至少)对上下文敏感,即使您满足于不将宏扩展作为语法分析的一部分


这并不意味着上下文无关语法不能作为Rust语法分析的一部分。这可能是必要的,甚至可以使用诸如bison或Antlr之类的解析器生成器(这两个示例都存在)。与大多数编程语言一样,Rust有一个简单的超集,它与上下文无关,可以使用上下文无关的语法工具进行有用的分析;然而,最终有一些文本需要在编译时被视为无效而拒绝,即使它们是CF超集的一部分。

直接从源代码中回答:

Rust的词汇语法不是上下文无关的。原始字符串文字是 问题的根源。非正式地说,原始字符串文字是r, 后跟N个散列(其中N可以为零)、引号、任何字符, 然后是一个引号,后跟N个散列。关键是,一旦进入第一个 一对引号,另一个引号后面不能有N个连续的引号 散列。e、 g.r.无效


考虑到and,看起来Rust的语法必须是上下文无关的。@peter(1)正如ira baxter在您的链接中所说,ANTLR允许在产品中使用任意谓词,因此它肯定可以识别一些非CF语法。(2)事实上,有人编写了一个名为
rust.g4
的文件,这并不能从表面上证明其内容实际上与通常称为rust的语言相对应。特别是当该文件已存在4年,且该语言因其重复的语法更改而臭名昭著时。除许可证外,该项目在4年内没有更新s、 Rust在1.0之前变化很大,我认为这不是一个足够好的论点:]