如何解决antlr4 TSqlParser.g4 / TSqlLexer.g4区分大小写问题
我正在使用These 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。