在Alloy網站的the Alloy grammar spec中,我發現自己被方括號使用困惑。合金文法規範中方括號的含義
在像下面這樣的製作中,事情看起來很清楚。
specification ::= [module] open* paragraph*
我猜的方括號表示可選性和星號是克萊尼關閉,所以剛纔所引述的規則意味着一個規範包括最多一個module
聲明,零項或多個open
條款,以及零個或多個paragraph
秒。這對我來說很有意義(儘管我會盡可能逐漸使用Wirth的EBNF表示法,所以我的筆記將其顯示爲[module] {open} {paragraph}
)。
雖然在下面的製作中,括號令我感到困惑。
cmdDecl ::= [name ":"] ["run"|"check"] [name|block] scope
這讓我感到吃驚很大,如果關鍵字run
和check
是在命令可選,並且要運行同上謂詞的名字,要檢查的斷言的名稱,或匿名塊運行或檢查。但這就是這條規則所說的。
所以問題1:什麼做方括號表示在語法?
問題2:是否使用方括號,有些讀者可能會認爲括號是錯字?即這條規則是否應該採取以下形式?
cmdDecl ::= [name ":"] ("run"|"check") (name|block) scope
也許我只是不熟悉在野外發現的各種語法符號;也許這將有助於指出該工具,或者指出對該符號的描述。
問題3:這是一種解析器生成工具使用的符號嗎?哪一個?
哎呀,不小心投了票,現在不能撤消! – Daniel