考虑一下Python Lark 解析器的这个简单测试:
GRAMMAR = '''
start: container*
container: string ":" "{" (container | attribute | attribute_value)* "}"
attribute: attribute_name "=" (attribute_value | container)
attribute_value: string ":" _value ("," _value)*
_value: number | string
attribute_name: /[A-Za-z_][A-Za-z_#0-9]*/
string: /[A-Za-z_#0-9]+/
number: /[0-9]+/
%import common.WS
%ignore WS
'''
data = '''outer : {
inner : {
}
}'''
parser = Lark(GRAMMAR, parser='lalr')
parser.parse(data)
这适用于parser='earley'
但它失败了parser='lalr'
。我不明白为什么。错误信息是:
UnexpectedCharacters:在第 2 列第 12 行没有为“{”定义终端
内部:{
这只是一个 MWE。我的实际语法也遇到了同样的问题。