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规则无法匹配时,这两个会辅助进行备份操作。这样,数据和各种解析就可以对应匹配,完成各自的任务。
opengauss数据库的词法和语法分析
最新推荐文章于 2024-04-18 09:39:19 发布