几乎没有任何编程语言的句法语法是规则的,因为它们允许任意深度嵌套的括号。 Rust 也这样做:
let x = ((((()))));
但 Rust 的句法语法至少是上下文无关的吗?如果不是,什么元素使语法与上下文相关?或者语法是否可以递归枚举,例如C++的句法语法?
Related: Rust 的词法语法是规则的、上下文无关的还是上下文相关的?
Rust 包含一个宏处理器,其操作是高度上下文相关的。
您可以尝试通过仅进行语法分析来解决此问题,但不包括宏扩展(可能,但不是特别有用),或者假设宏扩展是由某些中间工具完成的,该中间工具可以免费通过让它成为图灵完备的。
但我倾向于说,这仅仅意味着 Rust 语言是递归可枚举的。
宏定义的有效性存在许多限制,这些限制可能使语言(至少)对上下文敏感,即使您满足于不将宏扩展作为句法分析的一部分执行。
这并不意味着上下文无关语法不能作为 Rust 语法分析的一部分。这可能是必要的,甚至使用解析器生成器(例如 bison 或 Antlr)(并且两者都有示例)可能很有用。与大多数编程语言一样,Rust 有一个简单的超集,它是上下文无关的,并且可以使用上下文无关语法工具进行有用的分析;然而,最终有些文本需要在编译时被拒绝为无效,即使它们是 CF 超集的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)