Antlr:“是的;间隔标记“;关键词的lexer风格-为什么?

Antlr:“是的;间隔标记“;关键词的lexer风格-为什么?,antlr,antlr4,Antlr,Antlr4,我正在研究各种语言的语法集 使用这种“间隔字母”样式在lexer中定义SQL关键字 例如: CREATE:C R E A T E 。。。然后是字母表中每个字母底部的一组片段 我可能会采用以下风格: CREATE:“CREATE” 我很好奇他们使用的间隔样式意味着什么——我在antlr intellij插件中尝试了这两种样式,当给它一个CREATE的程序文本时,它在这两种情况下产生相同的解析树。我很好奇/感兴趣的是,他们使用的样式是否有一些固有的优势,或者仅仅是样式上的优势?您链接的语法为每个字符

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

使用这种“间隔字母”样式在lexer中定义SQL关键字

例如:

CREATE:C R E A T E

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

我可能会采用以下风格:

CREATE:“CREATE”


我很好奇他们使用的间隔样式意味着什么——我在antlr intellij插件中尝试了这两种样式,当给它一个
CREATE
的程序文本时,它在这两种情况下产生相同的解析树。我很好奇/感兴趣的是,他们使用的样式是否有一些固有的优势,或者仅仅是样式上的优势?

您链接的语法为每个字符使用了一个片段。这样,它可以以不区分大小写的方式处理语法

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

fragment A: [aA];
fragment B: [bB];
fragment C: [cC];
...
换句话说,当你
CREATE:C R E A T E
时,那些间隔开的字母实际上是片段,它们转换成
CREATE:[cC][rR][eE][aA][tT][eE]


有关更多详细信息,请参阅ANTLR文档中的。

进一步向下滚动该语法文件,您会看到原因:大小写不敏感。很酷-谢谢。如果你想做出回答而不是评论,我很乐意将其标记为已接受的回答。