首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tatsu分析中无法识别字母字符

tatsu分析中无法识别字母字符
EN

Stack Overflow用户
提问于 2019-04-20 08:38:58
回答 2查看 71关注 0票数 1

我已经定义了一个非常简单的语法,但tatsu的行为并不像预期的那样。

我添加了一个"start“规则,并以"$”字符终止它,但我仍然看到相同的行为。

如果我用正则表达式(digit = /[1-5x]/)而不是单个终端符号来定义“指法”规则,问题就会消失。但是,下面的老式BNF式语法不应该起作用吗?

代码语言:javascript
复制
from pprint import pprint
from tatsu import parse

GRAMMAR = """
@@grammar :: test
@@nameguard :: False

start = sequence $ ;
sequence = {digit}+ ;
digit = 'x' | '1' | '2' | '3' | '4' | '5' ;"""

test = "23"
ast = parse(GRAMMAR, test)
pprint(ast)  # Prints ['2', '3']

test = "xx"
ast = parse(GRAMMAR, test)
pprint(ast)  # Throws tatsu.exceptions.FailedParse: (1:1) no available options :

"xx“测试应该产生"'x','x'”,并且不会抛出异常。

我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2019-04-21 01:08:51

您可能需要检查与@@nameguard的交互,这在默认情况下处于打开状态。

对于语法的第一个版本,请使用:

代码语言:javascript
复制
@@nameguard :: False

您还可以考虑最适合语言和语法的@@whitespace@@namechars的定义。

票数 0
EN

Stack Overflow用户

发布于 2019-04-21 10:11:17

好的,我认为@@nameguard有问题。参见https://github.com/neogeny/TatSu/issues/95。目前比较简单的解决方法是使用模式表达式来代替单个字母终端。此外,当@@nameguard被修复时,文档应该澄清它只与以字母开头的字母数字有关。显然,这里的数字终端不需要@@nameguard。

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

https://stackoverflow.com/questions/55769255

复制
相关文章

相似问题

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