首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么吝啬不解析这个?

为什么吝啬不解析这个?
EN

Stack Overflow用户
提问于 2019-09-20 02:18:06
回答 1查看 201关注 0票数 1

我似乎完全无法理解为什么这不能解析。下面是我的简单语法(只是在尝试理解简约,因此语法可能没有意义)。

代码语言:javascript
复制
from parsimonious.grammar import Grammar
from parsimonious.nodes import NodeVisitor

sql_grammar = Grammar(
    """
    select_statement     = "SELECT" ("ALL" / "DISTINCT")? object_alias_section
    object_alias_section = object_name / alias
    object_name          = ~"[ 0-9]*"
    alias                = ~"[ A-Z]*"
    """
)


data = """SELECT A"""


tree = sql_grammar.parse(data)
print("tree:", tree, "\n")

SELECT 10解析,但由于某种原因,SELECT A无法解析。我的理解是,无论是object_name还是alias都应该在场。我做错什么了?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 01:30:58

你的语法有两个问题:

https://github.com/erikrose/parsimonious/blob/master/parsimonious/grammar.py#L224)

  • As

  • 吝啬不能自动处理空格,您必须处理它们(可以从README.md /操作符中的README.md/操作符中推导出一些想法来匹配第一个匹配的选项,因此它尝试首先匹配object_name。因为存在挂起的未解析空间,所以它与object_name和解析完成匹配。但是,即使正确处理空间,object_name也将匹配空字符串,解析也将以错误结束。

为了修正语法,我建议将其修改如下:

代码语言:javascript
复制
sql_grammar = Grammar(
    """
    select_statement     = "SELECT" (ws ("ALL" / "DISTINCT"))? ws object_alias_section
    object_alias_section = object_name / alias
    object_name          = ~"[ 0-9]+"
    alias                = ~"[ A-Z]+"
    ws                   = ~"\s+"
    """
)

一切都应该正确分析。

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

https://stackoverflow.com/questions/58020952

复制
相关文章

相似问题

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