gpt4 book ai didi

PEG (Grako) 的选项解析不足?

转载 作者:行者123 更新时间:2023-12-02 17:00:21 24 4
gpt4 key购买 nike

我的同事 PaulS 问了我以下问题:

<小时/>

我正在为现有语言(SystemVerilog - IEEE 标准)编写一个解析器,并且该规范中有一条结构与此类似的规则:

cover_point 
=
[[data_type] identifier ':' ] 'coverpoint' identifier ';'
;

data_type
=
'int' | 'float' | identifier
;

identifier
=
?/\w+/?
;

问题是在解析以下合法字符串时:

anIdentifier: coverpoint another_identifier;

anIdentifierdata_type 匹配(通过其标识符选项)成功,这意味着 Grako 正在寻找其后的另一个标识符,然后失败。然后它不会尝试在没有 data_type 部分的情况下进行解析。

我可以将规则重写如下,

cover_point_rewrite  
=
[data_type identifier ':' | identifier ':' ] 'coverpoint' identifier ';'
;

但我想知道是否:

  1. 这是故意的,并且
  2. 是否有更好的语法?
<小时/>

这是一般 PEG 问题,还是工具 (Grako) 问题?

最佳答案

上面写着here在 PEG 中,选择运算符是有序的,通过使用第一个匹配来避免 CFG 的歧义。

在第一个示例中

[data_type]
成功解析 id,因此当它找到 : 而不是另一个标识符时会失败。这可能是因为 [data_type] 的行为类似于 (data_type | ε),因此它始终会使用第一个 id 来解析 data_type

[data_type identifier ':' | identifier ':' ]
当没有第二个 id 时,第一个选择失败,因此解析器回溯并尝试第二个选择。

关于PEG (Grako) 的选项解析不足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24600189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com