我試圖實現解析查詢的語法。單個查詢由items
組成,其中每個項目可以是name
或name-ref
。添加對Antlr3語法的引用字符串支持
name
是mystring
(只有字母,無空格)或"my long string"
(字母和空格,總是加引號)。 name-ref
與name
非常相似,唯一的區別是它應該從ref:
(ref:mystring
,ref:"my long string"
)開始。查詢應至少包含1個項目(name
或name-ref
)。
這是我有:
NAME: ('a'..'z')+;
REF_TAG: 'ref:';
SP: ' '+;
name: NAME;
name_ref: REF_TAG name;
item: name | name_ref;
query: item (SP item)*;
此語法證明什麼,我基本上需要獲取,唯一的特點是,它不支持長引用的字符串(它工作得很好,它沒有名字空格)。
SHORT_NAME: ('a'..'z')+;
LONG_NAME: SHORT_NAME (SP SHORT_NAME)*;
REF_TAG: 'ref:';
SP: ' '+;
Q: '"';
short_name: SHORT_NAME;
long_name: LONG_NAME;
name_ref: REF_TAG (short_name | (Q long_name Q));
item: (short_name | (Q long_name Q)) | name_ref;
query: item (SP item)*;
但這不起作用。任何想法是什麼問題?可能重要的是:my first query
應被視爲3 item
s(3 name
s)並且"my first query"
爲1 item
(1 long_name
)。
有沒有什麼辦法擺脫long_name下的''''我想要for語法,但是在處理解析結果時我不需要它們,真的會喜歡非內聯Java解決方案 – agibalov
@ loki2302,你的意思是從第一個樹形圖像編輯:等等,我看到你接受了我的答案,這意味着你沒有任何問題嗎? –
我剛剛看到你已經更新了答案,是的,基本上我的問題在於 - 是否有方法在沒有Java字符串過程的情況下實現第二種方法? – agibalov