解决语法列表的解析歧义问题

resolving parsing ambiguity for syntactic lists

提问人:Byoungho Son 提问时间:6/21/2023 最后编辑:Byoungho Son 更新时间:6/21/2023 访问量:15

问:

我正在使用 kframework 解析 promela 代码,并在以下语法中遇到歧义:(即两者 和 是带有分隔符的语法列表SequenceDeclLst;)

Sequence ::= Step ; Sequence
           | Step

Step ::= ...
       | DeclLst

DeclLst ::= OneDecl ; DeclLst
          | OneDecl

尝试分析以下代码片段时,会出现歧义:

int a;
int b

我的解析器抱怨此代码可以解析为

  1. 两个 s 各为 一个 ,或StepOneDecl
  2. 一个本身就是一个StepDeclLst

显然,核心问题是两个句法列表(即 和 ) 共享相同的分隔符。SequenceDeclLst;

链接到 PROMELA 语法

我已经搜索了这种歧义问题,但我能找到的只是关于关联性或运算符优先级问题,这似乎不太相关。

谁能启发我如何在语法上解决这个问题? (甚至更好,使用 kframework 特定的解决方案)

解析 语法 promela kframework

评论

0赞 Brian Tompsett - 汤莱恩 6/21/2023
是的:错误消息是正确的;Promela 语法本身是完全模棱两可的!您只能通过不使用 promela 网站上的语法并修改您识别的语言来解决此问题。也许不是上下文无关的,而是上下文敏感的。

答: 暂无答案