我正在嘗試爲由作業組成的非常簡單的語言生成LALR語法。例如:LALR語法,尾隨逗號和多行列表分配
foo = "bar"
bar = 42
語言也應該處理值的列表,例如:
foo = 1, 2, 3
但我也想處理多條線路列表:
foo = 1, 2
3, 4
尾隨逗號(對於單身人士和語言靈活性):
foo = 1,
foo = 1, 2,
很顯然,無論是在同一時間:
foo = 1,
2,
3,
我能寫尾隨逗號或多行列表中的語法,而不是都在同一時間。
我的語法是這樣的:
content : content '\n'
: content assignment
| <empty>
assignment : NAME '=' value
| NAME '=' list
value : TEXT
| NUMBER
list : ???
注:我需要在語法中的 '\ n' 禁止這種代碼:
foo
=
"bar"
由於通過提前
安託萬。
你*可以*看看JavaScript,Go和Scala(可能更多,這些都離開我的頭頂)如何推斷分號。但要警告的是,這會導致陷入困境(表達式延伸到換行符),並且不少程序員會討厭它。也許你應該添加更多的限制(比如「parens/brakets/braces中的只有表達式可以擴展到多行)」,這就是Python所做的)。 – delnan 2012-03-13 22:23:59
其實,我的語言不是一種編程語言,而是一種配置格式,所以沒有表達。我考慮在列表中添加一些內容,但是如果可以的話,我更喜歡。 – Antoine 2012-03-13 22:35:07
你能提供一個鏈接到你的解析代碼,以便我們可以玩你的語法,看看它的工作原理和不是什麼? – 2012-03-14 08:30:28