antlr4 TSqlParser.g4/TSqlLexer.g4大小写敏感性问题



我使用这些TSql-Grammars/Lexers来解析c#目标中的存储过程。

我发现以下方法有问题。

public override void EnterProcedure_param(Procedure_paramContext context)
{
string txt = context.GetText();
string datatype = context.data_type().GetText();
if (IsUserDefinedType(datatype)) // not shown
DoSomething(datatype);
}

定义存储过程时,它将正确提取数据类型(和txt(:

CREATE PROCEDURE [dbo].[PROC_SomeProc]
@APPINSTID BIGINT
AS ...

但不是

CREATE PROCEDURE [dbo].[PROC_SomeProc]
@AppInstId BIGINT
AS ...

在后一种情况下,txt是"@AI",数据类型是"I"。

此外,如果参数被定义为@appinstid,则该方法永远不会被访问。

这是否意味着语法一定有缺陷,或者我可能遗漏了什么?

使用CaseChangingCharStream而不是标准令牌流。请在此处查看详细信息:https://github.com/antlr/antlr4/blob/master/doc/case-insensitive-lexing.md

最新更新