mysql词法分析antlr4_词法分析器中的Antlr4动作和谓词

我正在尝试为Antlr4中动态确定的批处理分隔符创建词法分析器规则 . 这支持两个用例:

不同的数据库系统定义了自己的批处理分隔符(例如'go',';''/')

我还想允许用户定义的批处理分隔符,最长可达2个字符,并且可能是任何东西,但是对于这个示例,我们假设它们是ascii字符 .

因此,出于本示例的目的,批处理分隔符是单独在其自身行上的任何字符串,并与当前已知的批处理分隔符匹配 . 还有几个更复杂的选择,但我想保持这个简单,因为问题是关于词法分析器中的动作和语义谓词,而不是批处理分隔符 .

因此,假设我已经定义了一个名为ALPHA的词法规则,它匹配任何大写或小写字母 . 另外,假设我只是尝试匹配 '\r'?'\n''\r'?'\n' ,即它自己的行上的批处理分隔符,而没有其他空格来对抗

我定义了以下词法规则:

BATCH_SEPARATOR:

NEWLINE ALPHA (ALPHA)? NEWLINE

;

NEWLINE: '\r'?'\n';

此规则适用于大多数情况,但不考虑将输入批处理分隔符候选项与批处理分隔符的有效值动态匹配 . 因此,虽然它会成功地lex 'go',';'等,当它们作为 SELECT 或 CREATE FUNCTION 语句的一部分出现在它们自己的行上时,它将错误地将'IN','AS'等作为批处理分隔符 .

所以现在我采取下一步检查实际的字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值