允许任意规则顺序的语法

Grammar that allows arbitrary rules order

我正在(尝试)设计一种特定于领域的语言(我称之为 "Fahrenheit")来设计引用样式。

用华氏温度编写的程序:

这是一个简化但有效的示例:

macro m1
  "Hello World!"
end

macro m2
  "Hello World!"
end

citation
  "Hello World!"
end

此语法将上述代码识别为语法正确:

style = macro* citation

(*  example of macro definition

    macro hw
        "Hello World!"
    end

    *)

macro = <'macro'> #'[a-z0-9]+' statement+ end

citation = <'citation'> statement+ end

statement = #'".*?"'

<end> = <'end'>

但是 "blocks"(例如 macrocitation)的顺序无关紧要。

问题:我应该如何更改我的语法才能将以下程序识别为语法正确?

macro m1
  "Hello World!"
end

citation
  "Hello World!"
end

macro m2
  "Hello World!"
end

PS:我打算添加其他可选块,顺序也不相关。

对于 0..n 规则,您可以将它们放在 citation 之前或之后。例如

style = tools* citation tools*
tools = macro | foo | bar
...