内爆时保留分离器
Retaining separator while imploding
我的语法定义如下所示
keyword LegendOperation = 'or' | 'and';
syntax LegendData
= legend_data: LegendKey '=' {ID LegendOperation}+ Newlines
;
我需要将其分解为一种方式,使我能够保留有关 ID 分隔符是 'or' 还是 'and' 的信息,但我在文档中没有找到任何内容分隔符是否保留,是否可以被内爆使用。最初,我做了类似下面的事情来尝试保留该信息ACn。
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
;
这有效并允许我们保留分隔符上的信息,但需要 post 处理才能变成可用的数据类型。
我的语法定义如下所示
keyword LegendOperation = 'or' | 'and';
syntax LegendData
= legend_data: LegendKey '=' {ID LegendOperation}+ Newlines
;
我需要将其分解为一种方式,使我能够保留有关 ID 分隔符是 'or' 还是 'and' 的信息,但我在文档中没有找到任何内容分隔符是否保留,是否可以被内爆使用。最初,我做了类似下面的事情来尝试保留该信息ACn。
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
;
这有效并允许我们保留分隔符上的信息,但需要 post 处理才能变成可用的数据类型。