2016-01-22 66 views
0

我想解析ms sql,它允许将很多事情放在括号内。例如,您可以将列名,表名,临时表和数据类型括起来。在MS中解析括号内容sql

这可以采取的形式类似如下:

select [#col1], [key], [case], [select], from [mytable] 
CREATE TABLE MyTable ([MyCol] [varchar](50) NULL) 

我遇到的是,如果我把一个“括号标识”进入我的词法定义,那么我的解析器将看到[MyCol令牌的问题]和[varchar]。 [varchar]不是我的解析器知道的数据类型,但是varchar是。我的语法无法处理处理一些括号内的令牌和一些未加标记的令牌的复杂性。另一方面,如果我将括号逻辑从我的词法分析器中取出并放入我的分析器中,那么我无法分析恰巧包含sql关键字的列名称。例如:

select [key], [special case] from MyTable 

如果它很重要,我从这生成c#代码,而不是java代码。

我该如何处理?

回答

1

在解析器中这样做是最好的方法。为了正确处理关键字作为标识符,您必须将所有允许的关键字添加到解析器标识符规则中,与我在MySQL grammar中所做的操作类似。