Antlr:"spaced token" 关键字的词法分析器样式 - 为什么?

Antlr: "spaced token" lexer style for keywords - why?

我在研究各种语言的语法合集

SQL Lite Lexer 使用这种“空格字母”样式来定义词法分析器中的 SQL 关键字。

所以,例如:

CREATE: C R E A T E

...然后是字母表中每个字母底部的一组片段。

我可能会采用以下样式:

CREATE: 'CREATE'

我很好奇他们使用的间隔样式是什么意思——我在 antlr intellij 插件中尝试了两种样式,当给它一个 CREATE 的程序文本时,它在两种情况下都会产生相同的解析树。我是 curious/interested 如果他们使用的风格有一些内在优势,或者只是文体?

您 link 的语法对每个字符使用一个片段。这样它就可以以 case-insensitive 的方式处理语法。

在语法的底部,您会看到定义如下的片段:

fragment A: [aA];
fragment B: [bB];
fragment C: [cC];
...

换句话说,当你CREATE: C R E A T E时,那些间隔的字母实际上是片段,翻译成CREATE: [cC] [rR] [eE] [aA] [tT] [eE]

有关详细信息,请参阅 ANTLR 文档中的 Case-Insensitive Lexing