Antlr 中 “.”相关注意


词法定义中有一些与通配符“.”有关的注意事项,下面给出一个示例。

d   :   C ANY  PLUS;

C   :   'c';

PLUS  : '+';

ANY  : ( options {greedy=false;} : . ) *;

这个文法是要匹配输入字符“c”和“+”,字符“c”与“+”之间可以是一些不确定的内容所以用通配符“.”进行匹配,如前面学到的应该使用greedy=false设置。但是此文法运行时会出现死循环情况。我们可以使用其它方法改写定义,由于字符“c”与“+”之间不应该出现“c”与“+”字符,所以ANY规则可以修改成以下的定义方法。

ANY  :  ~(C | PLUS)*;

不过如何正确使用“.”通配符呢?在使用通配符定义规则时要在当前的规则中明确的指定开始和结束字符。前面的示例中定义/**/注释时就是指定了开始结束字符。本示例只能改成:

CANYPLUS;

CANYPLUS  : ‘c’  (options {greedy=false;} : . ) * ‘+’;

所以“.”的使用范围是有限的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值