微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

内爆时保留分离器

如何解决内爆时保留分离器

我有一个看起来像这样的语法定义

keyword LegendOperation = 'or' | 'and';
Syntax LegendData
    = legend_data: LegendKey '=' {ID LegendOperation}+ Newlines
    ;

我需要将其分解为一种允许我保留有关 ID 的分隔符是“或”还是“和”的信息的方式,但我在文档中没有找到有关是否保留分隔符和如果它可以被内爆使用。最初,我做了类似下面的事情来尝试保留该信息。

Syntax LegendData
    = legend_data_or: LegendKey '=' {ID 'or'}+ Newlines
    > legend_data_and: LegendKey '=' {ID 'and'}+ Newlines
    ;

我遇到的问题是它需要能够解析三种形式的文本

. = Background
@ = Crate and Target
# = Crate or Wall

当它尝试解析第一行时,它会遇到歧义错误,而它应该将其解析为带有单个元素的 legend_data_or(也许我误解了如何使用优先级)。老实说,我更希望能够使用第二种格式,但有没有办法消除它的歧义?

在保留分隔符的同时内爆第一种语法的方法或消除第二种格式歧义的方法都可以帮助我解决这个问题。

解决方法

我最终没有想出一个优雅的解决方案。与他人讨论我们能想到的最好方法是

syntax LegendOperation
    = legend_or: 'or' ID
    | legend_and: 'and' ID
    ;

syntax LegendData
    = legend_data: LegendKey '=' ID LegendOperation*  Newlines
    ;

哪个有效并允许我们保留分隔符上的信息,但需要后期处理才能变成可用的数据类型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?