首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Tatsu语法中包含文字“#”?

如何在Tatsu语法中包含文字“#”?
EN

Stack Overflow用户
提问于 2019-05-30 01:28:25
回答 1查看 86关注 0票数 1

我无法让Tatsu解析包含文字“#”的语法。

下面是一个很小的例子:

代码语言:javascript
复制
G = r'''
atom = /[0-9]+/
     | '#' atom
     ;
'''

p = tatsu.compile(G)
p.parse('#345', trace=True)

解析抛出一个FailedParse异常。跟踪似乎表明解析器与“#”文字不匹配:

代码语言:javascript
复制
<atom ~1:1
#345
!'' /[0-9]+/
!'#' 
!atom ~1:1
#345

如果我将语法改为使用“#”以外的符号,它就会正常工作。例如,这起作用是:

代码语言:javascript
复制
G1 = r'''
atom = /[0-9]+/
     | '@' atom
     ;
'''

tatsu.parse(G1, '@345')     --> ['@', '345']

不幸的是,我无法更改输入数据的格式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-31 16:55:53

这可能是您正在使用的TatSu版本中的一个错误。

如果您需要坚持该版本,请尝试在语法中包括@@eol_comments :: //或类似的模式。

这对我来说很管用:

代码语言:javascript
复制
[ins] In [1]: import tatsu                                                                                      

[ins] In [2]: G = r''' 
         ...: atom = /[0-9]+/ 
         ...:      | '#' atom 
         ...:      ; 
         ...: ''' 
         ...:  
         ...: p = tatsu.compile(G) 
         ...: p.parse('#345', trace=True)                                                                       
↙atom ~1:1
#345
≢'' /[0-9]+/
#345
≡'#' 
345
↙atom↙atom ~1:2
345
≡'345' /[0-9]+/
≡atom↙atom 
≡atom 
Out[2]: ('#', '345')

后记:是的,上面的输出来自TatSu的master版本(序列返回tuple),但是我刚刚对照了v4.4.0,它是等价的。

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

https://stackoverflow.com/questions/56370527

复制
相关文章

相似问题

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