在ANTLR,我有一個MismatchedTokenException
,定義如下:匹配雙令牌
type : IDENTIFIER ('<' (type (',' type)*) '>')?;
而且下面的測試:
A<B,C<D>>
解析第一>
時出現的異常。 ANTLR試圖一次解析'>>',並且失敗。
隨着無聲空白信道,以下測試確實工作:
A<B,C<D> >
在其ANTLR被明確指示單獨地處理每個令牌。
我該如何解決這個問題?
在ANTLR,我有一個MismatchedTokenException
,定義如下:匹配雙令牌
type : IDENTIFIER ('<' (type (',' type)*) '>')?;
而且下面的測試:
A<B,C<D>>
解析第一>
時出現的異常。 ANTLR試圖一次解析'>>',並且失敗。
隨着無聲空白信道,以下測試確實工作:
A<B,C<D> >
在其ANTLR被明確指示單獨地處理每個令牌。
我該如何解決這個問題?
我無法重現。所產生的解析器:
grammar T;
type : IDENTIFIER ('<' (type (',' type)*) '>')?;
IDENTIFIER : 'A'..'Z';
解析輸入A<B,C<D>>
(無空格)到以下分析樹:
您需要提供導致此輸入產生一個語法MismatchedTokenException
。也許你正在使用ANTLRWorks的解釋器(或Eclipse的ANTLR-IDE,它使用相同的解釋器)?在這種情況下,即可能是問題所在:它是臭名昭着的越野車。不要使用它,但使用ANTLRWorks的調試器:它很棒(上面公佈的圖像來自調試器)。
拉茲洛博寧寫道:
明白了。我有一個定義的令牌< <。很快,有沒有辦法將令牌識別優先於另一種?
不,詞法分析器只是試圖儘可能匹配。因此,如果它可以創建與<<
(或>>
)相匹配的標記,則它將這樣做以支持兩個單一的標記<
(或>
)。只有兩個(或更多)詞法分析器規則匹配相同數量的字符時,纔會進行優先級排序:首先定義的規則將隨後在文法中定義的規則中「勝出」。
明白了。我定義了一個'>>'標記。很快,有沒有辦法將令牌識別優先於另一種? – Lazlo
@LazloBonin,看我編輯的答案。 –