簡體   English   中英

用於生成序列的 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_tokenexpr的元素序列。 因此,您的輸入無法用您的語法進行解析。

事實上,一個expr只能單獨存在於另一個expr中,這通常看起來不是很有用。 我認為這只會導致多套括號。 我認為您需要做的是允許將expr包含在tokens中。

那么也許:

?start : expr

    token : WORD                        
    repeat_token : token ":" INT        
    tokens : (token | repeat_token | expr)+    
    repeat : ":" INT
    expr  : "(" tokens ")" repeat?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM