2017-04-17 30 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)

我找不到解释。什么是频道?

任何人都可以请澄清这些命令中的每一个的功能,如果可能的话与例子?

请让我知道这是否太广泛。

谢谢。

回答

相关问题