javacc 教程4 Token Manager

JavaCC解析器中的TokenManager:词法状态与动作详解
本文详细解释了JavaCC解析器中TokenManager的工作原理,特别是词法状态管理和词法动作。词法状态控制正则表达式的匹配和状态转移,而词法动作定义匹配后执行的操作,包括处理TOKEN、SPECIAL_TOKEN和流控制。

从上图可以看出javacc在解析数据流的核心是token manager,它涵盖了词法状态(Lexical States)和词法动作(Lexical Actions)。

词法状态(Lexical States)

JavaCC词法规范被组织成一组词法状态,token manager随时处于这些词法状态之一。 当token manager初始化时,默认是' DEFAULT '状态。在构造令牌管理器对象时,也可以指定初始的词法状态。

如前面的文章所述,javacc有4种不同类型的正则表达式来定义词法规范,这里我们回忆一下:

Type Action
SKIP 简单地丢弃匹配的字符串(在执行任何词法操作之后).
MORE 继续到下一个状态,带上匹配的字符串。这个字符串将是新匹配字符串的前缀。
TOKEN 使用匹配的字符串创建一个令牌,并将其发送给解析器(或任何调用者)。
SPECIAL_TOKEN 创建不参与解析的特殊令牌。

而有些时候我们是需要定义多组词法规范的,每套词法规范都包含不同的TOKEN,SIKP....,这个时候我们就需要使用词法状态来帮我们做管理。下面的例子展示了当遇到不同的字符串切换的不同词法状态:

<DEFAULT> MORE : { "a" : S1 }

<S1> MORE :
{
  "b"
    { int l = image.length()-1; image.setCharAt(l, image.charAt(l).toUpperCase()); }
    ^1                                                                             ^2
    : S2
}

<S2> TOKEN :
{
  "cd" { x = image; } : DEFAULT
       ^3
}

如上所述,token manager在任何时刻都只处于一种状态。此刻,令牌管理器只考虑在此状态下定义的正则表达式进行匹配。 在匹配之后, 可以指定要执行的操作以及要移动到的新词法状态。如果没有指定新的词法状态,令牌管理器将保持当前状态。

所有

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值