- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下规则(取自 SMTP - RFC5321 ):
!path : "<" [ a_d_l ":" ] mailbox ">"
当我尝试解析这一行时:
<test.com:test.test@testtest.com>
我收到以下错误:
No terminal defined for ':'
不寻常的是,如果我简单地将 ":"
更改为 "_"
,它就会以某种方式起作用:
!path : "<" [ a_d_l "_" ] mailbox ">"
<test.com_test.test@testtest.com>
同样有效的是不包含该部分的行[ a_d_l ":"]
(这是可选的,如[]
所示)
!path : "<" [ a_d_l ":" ] mailbox ">"
<test.test@testtest.com>
我已经尝试为冒号定义终端规则,但这也不起作用:
!path : "<" [ a_d_l COLON ] mailbox ">"
COLON : ":"
<test.test@testtest.com>
最小可重现示例:
按照评论中的要求。
from lark import Lark
grammar = r'''
!path : "<" [ a_d_l ":" ] mailbox ">"
a_d_l : at_domain ( "," at_domain )*
at_domain : "@" domain
domain : sub_domain ("." sub_domain)*
sub_domain : let_dig [ldh_str]
let_dig : ALPHA | DIGIT
!ldh_str : ( ALPHA | DIGIT | "-" )* let_dig
address_literal : "[" ( ipv4_address_literal | ipv6_address_literal | general_address_literal ) "]"
ipv4_address_literal : snum ("." snum)~3
snum : DIGIT~1..3
ipv6_address_literal : "ipv6:" ipv6_addr
ipv6_addr : ipv6_full | ipv6_comp | ipv6v4_full | ipv6v4_comp
ipv6_full : ipv6_hex (":" ipv6_hex)~7
ipv6_hex : HEXDIG~1..4
!ipv6_comp : [ipv6_hex (":" ipv6_hex)~0..5] "::" [ipv6_hex (":" ipv6_hex)~0..5]
!ipv6v4_full : ipv6_hex (":" ipv6_hex)~5 ":" ipv4_address_literal
!ipv6v4_comp : [ipv6_hex (":" ipv6_hex)~0..3] "::" [ipv6_hex (":" ipv6_hex)~0..3 ":"] ipv4_address_literal
!general_address_literal : standardized_tag ":" dcontent+
standardized_tag : ldh_str
dcontent : /[\x21-\x5A|\x5E-\x7E]/
mailbox : local_part /[\x40]/ ( domain | address_literal )
local_part : dot_string | quoted_string
dot_string : atom ("." atom)*
atom : atext+
quoted_string : /[\x22]/ qcontentsmtp* /[\x22]/
qcontentsmtp : qtextsmtp | quoted_pairsmtp
quoted_pairsmtp : /[\x5C\x5C]/ /[\x20-\x7E]/
qtextsmtp : /[\x20-\x21|\x23-\[\]-\x7E]/
atext : /[\x21|\x23-\x27|\x2A|\x2B|\x2D|\x2F-\x39|\x3D|\x3F|\x41-\x5A|\x5E-\x7E]/
command : [ path ]
%import common.WS -> SP
%import common.NEWLINE -> CRLF
%import common.DIGIT
%import common.LETTER -> ALPHA
%import common.HEXDIGIT -> HEXDIG'''
input = "<test.com:test.test@testtest.com>"
try:
result = Lark(grammar, start="command").parse(input)
except Exception as ex:
print('####### Parsing Failed')
print(ex)
traceback.print_exc()
result = None
return result
最佳答案
!path : "<" [ a_d_l ":" ] mailbox ">"
a_d_l : at_domain ( "," at_domain )*
at_domain : "@" domain
仅匹配 "<@test.com:test.test@testtest.com>"
。它无法匹配"<test.com:test.test@testtest.com>"
因为它不是以 "<" at_domain
开头或"<" mailbox
.
关于python - Lark解析器: No terminal defined for ':' (Seeming bias against colon character ":"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59216854/
我一直在试验 lark ,但遇到了一个小问题。假设我有以下语法。 parser = Lark(''' ?start: value | start "or" value
我正在尝试编写一个 SMTP 解析器,并从 rfc 中获取一些引用字符串的信息。 .所以我有以下语法(取出所有有效的部分,关注无效的部分): quoted_string : /[\x22]/ qco
我的语法有一个优先级问题,我没有更多的想法来解决它。 我正在使用 Lark 事情是这样的(我已经尽可能地简化了问题): from lark import Lark parser = Lark(r"""
我正在尝试解析我正在编写的一些伪代码,但在获取符号值时遇到了一些问题。它解析成功,但不会返回与“常规”字符相同的值。这是一个例子: >>> from lark import Lark >>> pars
我正在为 rules_scala 实现类似 Strict Java Deps 的功能。 如果使用 warn 或 error,我真的很想能够在运行时进行配置。 我似乎记得 skylark 规则无法创建和
让我们首先考虑使用 lark 的简单 json 解析器: import sys from lark import Lark, Transformer, v_args json_grammar = r"
假设我有以下内容: items : (item separator)+ 这适用于: i1, i2, i3, 但不适用于: i1, i2, i3 如何做到不需要结尾分隔符? 最佳答案 这看起来更像是您需
我正在使用 lark,一个优秀的 python parsing library . 它提供了 Earley 和 LALR(1) 解析器,并通过 custom EBNF format 定义。 . (EB
如何实现可以导入文件并仍然使用 LARK 解析它的语法? 例如: @import file.txt ..... 最佳答案 我找到了一个看起来相关的 GitHub,这就是您要找的吗? https://g
考虑 Python Lark parser 的这个简单测试: GRAMMAR = ''' start: container* container: string ":" "{" (container
我正在尝试使用 lark 实现记录定义 DSL .它基于缩进,这让事情变得有点复杂。 Lark 是一个很棒的工具,但我遇到了一些困难。 这是我正在实现的 DSL 的一个片段: record Order
Lark 解析器预定义了一些常见的终端,包括一个字符串。它的定义如下: _STRING_INNER: /.*?/ _STRING_ESC_INNER: _STRING_INNER /(?
我正在尝试为 dsl 编写 lark 语法,但在使用此字符串插值语法时遇到了问题: " abc " <- normal string " xyz~{expression}abc " <- string
我在运行 checkov 时遇到一些问题,我不熟悉 python 库,任何人都可以给我一些提示吗? 这在某些机器上运行良好,但在这台机器上尤其不行...... 在 CentOS 中运行: $ chec
我已经编写了cs143 course中指定的decaf语法. 这是我的代码。 import sys from lark import Lark, Transformer, v_args decaf_g
我是一名优秀的程序员,十分优秀!