首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANSI Sql 2003词法分析间隔

ANSI Sql 2003词法分析间隔
EN

Stack Overflow用户
提问于 2012-02-09 02:29:13
回答 1查看 254关注 0票数 2

出于我自己的兴趣,我正在编写一个ANSI SQL Lexer。具体地说,我正在努力符合ISO/IEC 9075-2:2003(E)。我在令牌阶段遇到了一些模棱两可的问题。

lexical element部分定义间隔字符串,如下所示:

代码语言:javascript
复制
<interval string> ::= <quote> <unquoted interval string> <quote>
<unquoted interval string> ::= [ <sign> ] { <year-month literal> | <day-time literal> }
<year-month literal> ::= <years value> [ <minus sign> <months value> ]  | <months value>
<years value> ::= <datetime value>
<months value> ::= <datetime value>
<datetime value> ::= <unsigned integer>
<unsigned integer> ::= <digit>...
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

示例:'30‘

是不带选项的30 a,还是

理论上我可以这样写:选择'30‘

我创建了一个YearsValue令牌和一个MonthsValue令牌(类)。然而,模棱两可是一个问题,它两者都匹配。在ISO/IEC9075的第1部分或第2部分中,我没有看到任何专门处理多个匹配的内容。

有人能指出这是在规范中的什么地方处理的吗?或者只是假设从左到右?

在有人问起之前,我这么做是因为我想写一个SQL词法分析器。这不是用来上学的,只是用来教育我自己的。我也不想用GOLD或ANTLR。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-09 03:50:16

是不带选项的30a,还是a?

根据我对SQL2003草案的阅读,它在某种程度上是模棱两可的,并不重要。是的,语法没有指定INTERVAL '1' YEAR中的1<years value>还是<months value>,甚至是<days value>,但这真的无关紧要。对如何解释YEAR的描述很清楚,即使1被解析为<months value>,它也是若干年。该标准规定,值中的第一个分量映射到interval类型中的第一个字段类型:

5.3

一般规则

7)或中的第i个datetime组件将datetime组件的值赋给或中的第i个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9199265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档