如何使用 K Framework 转换以下 EBNF 规则?
一个元素可以用来表示前面的零个或多个:
items ::= {"," item}*
现在,我正在使用Domain 模块中的 List 。但是内联List
声明是不允许的,比如这个:
syntax Foo ::= Stmt List{Id, ""}
现在,我必须为列出的项目创建一个新的语法规则来解决这个问题:
syntax Ids ::= List{Id, ""}
syntax Foo ::= Stmt Ids
是否有另一种方法来对抗这种新规则的创建?
一个元素可以出现零次或一次。换句话说,它可以是可选的:
array-decl ::= <variable> "[" {Int}? "]"
我们要接受的地方:a[4]
和a[]
。现在,为了绕过这个,我创建了 2 条规则,其中一个分支有项目,另一个没有。但在我看来,这个解决方案以不必要的方式重复了规则。
一个元素可以出现以下一个或多个:
e ::= {a-z}+
我们不接受任何非零长度的小写字母序列。现在,我没有找到模拟这个的方法。
先感谢您!