Rust 的句法语法是上下文无关的还是上下文相关的?

2023-11-22

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

let x = ((((()))));

但 Rust 的句法语法至少是上下文无关的吗?如果不是,什么元素使语法与上下文相关?或者语法是否可以递归枚举,例如C++的句法语法?


Related: Rust 的词法语法是规则的、上下文无关的还是上下文相关的?


Rust 包含一个宏处理器,其操作是高度上下文相关的。

您可以尝试通过仅进行语法分析来解决此问题,但不包括宏扩展(可能,但不是特别有用),或者假设宏扩展是由某些中间工具完成的,该中间工具可以免费通过让它成为图灵完备的。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust 的句法语法是上下文无关的还是上下文相关的? 的相关文章

随机推荐

  • 返回具有嵌套级别和值的嵌套列表

    我想使用可视化一些深层嵌套的数据网络D3 我不知道如何在发送之前将数据转换为正确的格式radialNetwork 这是一些示例数据 level lt c 1 2 3 4 4 3 4 4 1 2 3 value lt letters 1 11
  • 是否可以将流量路由到特定 Pod?

    假设我正在 GKE 中运行我的应用程序 这是一个多租户应用程序 我创建了多个托管我的应用程序的 Pod 现在我想要 客户 1 1000 使用 Pod1 使用 Pod2 的客户 1001 2000 ETC 如果我有一个指向我的集群的 gclo
  • 使用 GLUT 在 3D OpenGL 世界中显示固定位置 2D 文本

    我有一个OpenGL项目使用GLUT 不是 freeglut 其中我想在视口上的固定位置显示 2D 文本 我的其余对象位于 3D 世界坐标中 这个答案一个相关的老问题说 GLUT 附带的位图字体是简单的 2D 字体 不适合在 3D 环境中显
  • 这是 .NET 的 Regex.Split 中的错误吗?

    我有两个正则表达式 用于Regex Split lt G and lt G 2 分割字符串时 A B C D E F G 第一个结果是 A B C D E F G 第二个结果是 A B A C D C E F E G 这里发生了什么 我以为
  • 让 html5 地理定位在用户每次重新加载页面时请求许可

    为什么我们需要它 我们的网站上有一些页面 允许用户输入一些数据并搜索其所在地区的其他客户 当用户打开该页面时 必须显示弹出消息 http foo bar com想要使用您当前的位置 之后 用户可以放弃它并手动填写位置字段或接受并自动重定向到
  • 从视频 URL 中提取缩略图

    我必须从视频 来自网址 中提取缩略图 我使用以下代码 NSString stringUrl video stringurl NSURL url NSURL URLWithString stringUrl AVURLAsset asset A
  • 用 C++ 读取另一个进程的标准输出

    在 Windows 中 有没有办法在 C 中启动进程 然后在完成后将其吐出到 stdout 中 如有必要 必须使用提升的权限 在 Vista 或更高版本上 运行该进程 我目前正在使用 ShellExecuteEx 启动进程并运行 while
  • jQuery data() 如何打破循环引用

    我读过一篇为什么它更好 and 它是如何实施的 但我真正不明白的是它如何打破循环引用 它如何打破参考圆 div1 data item div2 div2 data item div1 例如 上面的div互相指向 如何防止 我有一种预感 但我
  • 在不裁剪的情况下缩放 SDL Surface 的正确方法?

    缩放 SDL Surface 的正确方法是什么 我在网上找到了一种解释 但它需要逐像素地重新绘制表面 似乎应该有某种方法可以通过 SDL 本地执行此操作 而不是像那样重新绘制图像 我在 SDL 文档中找不到任何涉及此内容的内容 我可以通过修
  • 从 sbt shell 中设置环境变量

    我希望能够在交互式 sbt shell 中设置环境变量 但我似乎找不到方法来做到这一点 我查看了官方 sbt 文档以及 stackoverflow 但没有成功 我想明确的是我不想要必须在中设置此环境变量build sbt文件 而是能够在交互
  • android从布局xml动态添加元素

    如何从此布局 xml 中获取元素 myButton
  • 如何获取 RawInput HID 设备的人类可读名称?

    我正在将应用程序从 DirectInput 切换到 RawInput 以进行游戏手柄处理 并且我想为每个游戏手柄提供人类可读的描述 理想的情况是显示在设备管理器中的设备文本 但 USB 产品描述也可以 任何方法都应该在没有管理员许可的情况下
  • 谷歌地图 setMap 不是一个函数

    我正在处理我的谷歌地图页面在 Firebug 中显示错误的问题 当我在经销商地图中搜索时 将触发 clearLocations 函数 但出现了这个错误 markers i setMap 不是一个函数 有谁知道如何解决这个问题 我在几个论坛和
  • 更改列名而不重新创建 MySQL 表

    有没有办法在不进行重大更改的情况下重命名 InnoDB 表上的列 桌子相当大 我想避免重大停机 重命名列 使用ALTER TABLE CHANGE COLUMN 不幸的是需要 MySQL 运行全表复制 查看pt 在线架构更改 这有助于您对表
  • Netbeans 更新失败

    我的互联网连接没有问题 但是当我尝试更新 netbeans 插件或 IDE 本身时 每次都会出现此屏幕 即使重新安装操作系统也无法解决此问题 一次又一次地遇到同样的错误 我该如何修复它 在 Netbeans 中 Go to Tools gt
  • 使用 jQuery 更改图像地图坐标值

    我有一个非常复杂的图像映射 我想将其缩小一半 为此 需要将所有坐标值除以 2 由于有数千个坐标值 我想我可以使用 jQuery 遍历 DOM 来查找坐标值 然后将它们除以 2 当涉及到 JavaScript 和 jQuery 时 我非常业余
  • 为什么“复制到输出目录”选择的用语在不同位置之间会发生变化?

    VS NET 中的解决方案资源管理器中的配置值措辞与 VS NET 中的预计值之间存在不一致 csproj文件 在Solution Explorer a config或依赖文件中会有多个选项Copy To Output Directory影
  • Laravel 5.6:创建图像缩略图

    在我的旧 PHP 应用程序中 我曾经运行如下函数来创建 jpeg 图像缩略图 function imageThumbanail image src imagecreatefromjpeg http examplesite com image
  • Luigi - 覆盖任务需要/输入

    我正在使用 luigi 执行一系列任务 如下所示 class Task1 luigi Task stuff luigi Parameter def output self return luigi LocalTarget test json
  • Rust 的句法语法是上下文无关的还是上下文相关的?

    几乎没有任何编程语言的句法语法是规则的 因为它们允许任意深度嵌套的括号 Rust 也这样做 let x 但 Rust 的句法语法至少是上下文无关的吗 如果不是 什么元素使语法与上下文相关 或者语法是否可以递归枚举 例如C 的句法语法 Rel