允许任意规则顺序的语法
Grammar that allows arbitrary rules order
我正在(尝试)设计一种特定于领域的语言(我称之为 "Fahrenheit")来设计引用样式。
用华氏温度编写的程序:
- 必须只有一个
citation
方块
- 可以有零个或多个
macro
个块。
这是一个简化但有效的示例:
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"(例如 macro
或 citation
)的顺序无关紧要。
问题:我应该如何更改我的语法才能将以下程序识别为语法正确?
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
...
我正在(尝试)设计一种特定于领域的语言(我称之为 "Fahrenheit")来设计引用样式。
用华氏温度编写的程序:
- 必须只有一个
citation
方块 - 可以有零个或多个
macro
个块。
这是一个简化但有效的示例:
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"(例如 macro
或 citation
)的顺序无关紧要。
问题:我应该如何更改我的语法才能将以下程序识别为语法正确?
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
...