2017-04-17 161 views
0

我已經開始學習在ANTLR 4.5中編寫一個詞法分析器。從this page,作爲文檔,我看到以下Lexer命令存在:more,pushMode(x),popMode,type(x),channel(x),mode(x),skip。ANTLR4中的各種Lexer命令的功能。我的解釋是否正確?他們每個人做什麼?

我還沒有能夠清楚地瞭解它們的功能。以下是我的他們每個人的理解不:

跳過

這跳過了已在當前令牌被讀取的所有字符。過去的令牌不變。

所以,如果詞法分析器已經看了一些人物a,它下一步讀取b,對應於

SOME_RULE : 'b' -> skip; 

那麼就會丟掉兩ab並轉到下一個標記。

更多

我不確定這是幹什麼的。該文件說,已閱讀的文本將不會被丟棄,但什麼標記最終都不會在那裏。假設我有

RULE_1 : 'a' -> more; 
RULE_2 : 'b'; 

如果a被讀取,然後b,將產生的令牌對應於RULE_2與語義值ab,或RULE_1 RULE_2,還是其他什麼東西?

類型(X)

如果非要

RULE_1 : 'a' -> type(TOKEN_1); 
RULE_2 : 'b'; 

只會a被取爲TOKEN_1語義值,或將對應於未標記的規則的所有字符,從一最後一個標記,被視爲語義值?如果一個b和一個a到達,將TOKEN_1的值是aba

模式(x)的

這將模式切換到一個新的mode。但是,在這裏,是直到切換點保存或丟棄的字符?什麼是令牌?每種模式都有單獨的堆棧嗎?

pushMode(X)

這是如何從mode有什麼不同?這種情況是否已將已讀字符推送到它將要進入的模式,這在mode中不會發生?

popMode

什麼彈出?如果我有

RULE_1 : 'a' -> popMode; 
RULE_2 : 'b' ; 

如果我得到一個ba,將popMode原因只a退換,或ba,或令牌,如果有的話?爲什麼我偶爾會因爲空棧而發生錯誤?

channel(x)

我找不到解釋。什麼是頻道?

任何人都可以請澄清這些命令中的每一個的功能,如果可能的話與例子?

請讓我知道這是否太廣泛。

謝謝。

回答

相關問題