2011-04-24 79 views
1

我目前正在嘗試爲我們在公司中使用的內部語言編寫基於Eclipse的編輯器。語言是形式的語句的集合:在Xtext中解析字符串

{action}: {arguments} 

...在自己的行。 {arguments}的格式取決於正在執行的{action}的類型。腳本片段的示例可能如下所示:

banner: Some string with numbers and punctuation (23) in it! 
# some comment 
timeout: 42 

我的問題是解析這樣的片段。我有評論和超時聲明的工作,但我似乎無法創建一個規則來覆蓋橫幅聲明。我所有的嘗試都導致Antlr「令牌定義不可達」警告,或編輯器無法匹配輸入。我試過橫幅聲明以下規則:

Banner: 
    'banner:' name=ANY_OTHER*; 

Banner: 
    'banner:' name=FF_STRING; 
terminal FF_STRING : ('a'..'z'|'A'..'Z'|'0'..'9'|'.'|':'|' ')+; 

...使我有ANTLR警告。我提出的一個黑客就是簡單地創建一個與SL_COMMENT完全相同的終端,在開始時使用'banner:'而不是'#'。缺點是我沒有語法着色,自動完成列表中也沒有顯示「橫幅」。

歡迎任何建議。

回答

4

您可以嘗試使用數據類型規則和一組縮減的終端規則。 像這樣的東西可以工作:

Banner 
    'Banner:' name=Value; 
Value hidden(): 
    (ID | WS | INT | <any keyword from your grammar>)* LineBreak; 
terminal LineBreak: '\r' '\n'? | '\n'; 
termianl WS: (' '|'\t') * 
+0

感謝您的答覆。這似乎工作,雖然我仍然得到antlr「決定可以匹配輸入,如...」類型的警告,當我試圖在我的價值規則中添加':'。我認爲這是因爲我將':'作爲一個單獨的關鍵字緊跟在「橫幅」之後(即橫幅和冒號之間可能有空格)。 – Exponent 2011-04-26 03:07:40