grammar - 将模棱两可的语言转换为明确的
问题描述
我得到了一项家庭作业,将以下语法转换为明确的。
A --> B
A --> ε
B --> B @ B
B --> STRING
B --> DOUBLE(STRING)
其中 A 和 B 是非终结符, STRING 和 DOUBLE 是非终结符。
我可以得出它是模棱两可的,因为可以为字符串构造两个不同的解析树,例如:
STRING @ STRING @ DOUBLE(STRING)
.
到目前为止,我有:
A --> B | ε
B --> B @ DOUBLE(STRING)
B --> C
C --> C @ STRING | STRING | DOUBLE(STRING)
但是它并不像字符串那样完整,例如:
字符串@双(字符串)@字符串
无法制作。我如何将此语法转换为明确的?
解决方案
继续 Joop 的回答,您可以引入一个新符号D
来消除 周围的歧义B --> B @ B
:
A --> D
A --> ε
D --> D @ B
D --> B
B --> STRING
B --> DOUBLE(STRING)
通过此更改,语言中的任何字符串都只能使用一棵树。
推荐阅读
- excel - 复制多个工作表以覆盖同一工作簿中的现有工作表
- php - 包括(url):提交打开流:连接被拒绝
- javascript - 如何使用 React 运行 node.js 服务器?
- python - PyQt5 - 使用新的 pandas DataFrame 更新 TableView 时出现问题
- java - 如何将 Docker 容器作为持久服务器运行?
- spring-boot - 使用 JUnit 5 和 EmbeddedKafkaBroker 在 Spring Boot 应用程序中测试 Apache Kafka 集成
- pytorch - PyTorch:cuda 内存不足但剩余内存足够(添加错误消息)
- r - UTM 的范围和纬度的投影
- flutter - 颤振块中的状态或事件没有改变
- flutter - 有没有办法在构造函数中用不透明度定义颜色?