几乎没有任何编程语言的句法语法是规则的,因为它们允许任意深度嵌套的括号。 Rust 也是:
let x = ((((()))));
但是 Rust 的句法语法至少是上下文无关的吗?如果不是,什么元素使语法上下文敏感?或者语法甚至是递归可枚举的,比如 C++'s syntactical grammar ?
相关:Is Rust's lexical grammar regular, context-free or context-sensitive?
最佳答案
Rust 包含一个宏处理器,其操作对上下文高度敏感。
您可以尝试通过只进行语法分析来绕过这个问题,但不包括宏扩展——可能,但不是特别有用——或者假设宏扩展是由一些中间工具完成的免费通行证以使其成为图灵完备的。
但我倾向于说它只是意味着 Rust 语言是递归可枚举的。
宏定义的有效性有许多限制,这可能使语言(至少)上下文敏感,即使您满足于不执行宏扩展作为句法分析的一部分。
这并不意味着上下文无关文法不能用作 Rust 句法分析的一部分。这可能是必不可少的,使用解析器生成器(例如 bison 或 Antlr)甚至可能很有用(并且两者的示例都存在)。像大多数编程语言一样,有一个简单的 Rust 超集,它是上下文无关的,可以用上下文无关的语法工具进行有用的分析;然而,最终有些文本需要在编译时被拒绝为无效,即使它们是 CF 超集的一部分。
关于rust - Rust 的句法语法是上下文无关的还是上下文敏感的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43677722/