我試圖捕捉看起來像 _SC彈鋼琴1 在樹上用3個節點「_SC」「玩」和「鋼琴1」ANTLR語法如何捕捉所有字符到行尾
的命令到目前爲止,我已經得到了語法
grammar PBScript;
options {
output = AST;
language = CSharp2;
}
line : COMMAND WS ACTION;
COMMAND : '_SC';
ACTION : 'play';
WS : (' '|'\t')+ ;
當我創建另一個規則來捕捉,像這樣的「鋼琴1」的一部分:
grammar PBScript;
options {
output = AST;
language = CSharp2;
}
line : COMMAND WS ACTION WS PARAMETER;
COMMAND : '_SC';
ACTION : 'play';
WS : (' '|'\t')+;
PARAMETER
: (~('\n'|'\r'))+ ;
我得到一個MismatchedTokenExceptio N(6!= 5)。我知道語法錯了,我知道它爲什麼錯了。這是不明確的,因爲WS與PARAMETER重疊。我只是不知道如何解決它。
除_SC和PARAMETER之外還有其他動作應該是可選的,最終甚至會有不同的線型,看起來像Name: blah blah blah
,我至少需要在樹中使用「Name」和「blah blah blah」以防萬一這很重要,但現在我只是想弄清楚PARAMETER的用途。
〜湯姆
編輯:字符串「鋼琴1」應該是不換行字符的任意字符串所以從第一個非空白戲後,該行的末尾。
不能更改你的語法,這樣的命令_SC玩「鋼琴1」 ,而不是_SC播放鋼琴1?引號將消除歧義。 – Eduardo 2012-02-28 10:31:55
雙引號字符作爲字符串的一部分有效。如果我只希望其他程序員使用它,我可以強迫他們擺脫雙引號,但是我將這些交給那些不特別使用計算機的人。 – majinnaibu 2012-02-29 01:06:32