用于生成序列的 DSL
DSL for generating sequences
正在尝试创建 DSL 以生成序列...这是我目前所做的:
?start : expr
token : WORD
repeat_token : token ":" INT
tokens : (token | repeat_token)+
repeat : ":" INT
expr : "(" tokens | expr ")" repeat?
这是 DSL 的样子:
(a b:2 (c d:3):2 ):3
[[a bb [[c ddd] [c ddd]] ] ... ]
我在 expr ... 中遇到 expr 问题?
这失败了:
(a:2 (b))
您如何看待 (a:2 (b))
适合您的语法?看来你做不到。这是我的逻辑:
由于括号的原因,外层必须是 expr
。在那个 expr
中,你有一个 repeat_token
和另一个 expr
。我看不到任何地方可以让您拥有包含 repeat_token
s 和 expr
s 的元素序列。因此,您的输入无法用您的语法进行解析。
事实上,一个expr
只能单独存在于另一个expr
中,一般来说似乎没什么用。我认为这只会导致多套括号。我认为您需要做的是允许 expr
包含在 tokens
.
中
那么也许:
?start : expr
token : WORD
repeat_token : token ":" INT
tokens : (token | repeat_token | expr)+
repeat : ":" INT
expr : "(" tokens ")" repeat?
正在尝试创建 DSL 以生成序列...这是我目前所做的:
?start : expr
token : WORD
repeat_token : token ":" INT
tokens : (token | repeat_token)+
repeat : ":" INT
expr : "(" tokens | expr ")" repeat?
这是 DSL 的样子:
(a b:2 (c d:3):2 ):3
[[a bb [[c ddd] [c ddd]] ] ... ]
我在 expr ... 中遇到 expr 问题?
这失败了:
(a:2 (b))
您如何看待 (a:2 (b))
适合您的语法?看来你做不到。这是我的逻辑:
由于括号的原因,外层必须是 expr
。在那个 expr
中,你有一个 repeat_token
和另一个 expr
。我看不到任何地方可以让您拥有包含 repeat_token
s 和 expr
s 的元素序列。因此,您的输入无法用您的语法进行解析。
事实上,一个expr
只能单独存在于另一个expr
中,一般来说似乎没什么用。我认为这只会导致多套括号。我认为您需要做的是允许 expr
包含在 tokens
.
那么也许:
?start : expr
token : WORD
repeat_token : token ":" INT
tokens : (token | repeat_token | expr)+
repeat : ":" INT
expr : "(" tokens ")" repeat?