opengauss数据库的词法和语法分析

1、    词法分析部分:
openGauss采用flex和bison两个工具来完成词法分析和语法分析的主要工作。对于用户的每个输入的SQL语句,flex工具会先把这些语句进行词法分析,然后生成词法分析的代码

这一部分定义的是扩展注释语法,这部分和允许的运算符语法类似,但是这里实现的主要方式是让lex识别以斜杠星作为一个注释,当注释的部分不对劲的时候,就会自动跳出来,把它解释为运算符。现在,只要发现斜杠星这样的东西,lex就可以认为它是一个3字符的操作符,这里把{op_char}追加到xcstart,让它可以匹配尽可能多的{op_char}文本然后通过规则确保xcstart可以完成自己的任务,多余的东西利用yyless()放回去,避免把停止注释的操作符给一并注释掉。

接下来看这里:self是作为单个字符返还的字符集,op_char则是可以组成op标记的字符集,可以是一个或者多个字符长,在下面的operator就是由多个operator完成的。这些集合虽然重叠,但是每个集合都有一些不在另一个集合中的字符,还是有所区别的。

这里是对于解析的补充,将一元负数单独传递给解析器,其中添加了realfail1和realfail2,当real规则无法匹配时,这两个会辅助进行备份操作。这样,数据和各种解析就可以对应匹配,完成各自的任务。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值