python - 了解什么是云雀语法中的歧义
问题描述
我试图简化另一个问题中提出的案例,并使用lark进行了以下解析尝试:
from lark.lark import Lark
text = """
start_thing {
loc int {
from 0,
to 1093,
strand plus,
id gi 384632836
}
}
"""
grammar = """\
thing: "start_thing" node
locus_info: "loc int" "{" int_info "," int_info "," STRAND_INFO "," int_info "}"
int_info: TAGS? INT
node: locus_info
| int_info
| TAGS? "{" nodes "}" -> subnodes
| TAGS -> onlytags
nodes: node?
| node ("," node)*
STRAND_INFO: "strand" SIGN
SIGN: "plus" | "minus"
TAGS: TAGWORD (WS TAGWORD)*
TAGWORD: ("_"|LETTER)("_"|"-"|LETTER|DIGIT)*
%import common.WS
%import common.LETTER
%import common.DIGIT
%import common.INT
%ignore WS
"""
parser = Lark(grammar, start="thing", ambiguity="explicit")
parsed = parser.parse(text)
print(parsed.pretty())
输出:
thing
subnodes
nodes
subnodes
loc int
nodes
node
int_info
from
0
node
int_info
to
1093
onlytags strand plus
node
int_info
id gi
384632836
如本例所示,该ambiguity="explicit"
选项应该能够显示替代匹配的可能性,前面有一个_ambig
标签。这没有出现在上面的输出中。似乎我不明白模棱两可是什么。
为什么“链加”不被认为是模棱两可的?在我看来,它可以与STRAND_INFO
或匹配onlytags
。
同样,我希望 "loc int {...}" 与locus_info
or匹配subnodes
。
解决方案
推荐阅读
- ios - 在 Swift 5 中保存天数
- php - Joomla:用站点绝对(MVC)替换组件相对链接
- flutter - Flutter ListView.builder
- microsoft-graph-api - 无法在 MS Graph Onedrive 中上传大文件
- python - 如何从 df.groupby 获取初始行的索引?
- sparql - 显式断言 SubClassOf 的所有传递属性会禁止查询直接子级的能力
- vuejs2 - 使用 Vue @click 事件处理程序关闭我的模型不起作用
- java - 读取 CSV 文件并在 Java 中存储数据
- c# - Unity - C# - 开火前开枪
- c - 如何删除此代码中的代码重复?