提问人:taat 提问时间:11/9/2023 更新时间:11/9/2023 访问量:42
解析器 如何创建与“end”以外的任何字符串匹配的规则
Parser How to create a rule that matches any string apart from "end"
问:
大家好,所以我正在写一个解析器,我遇到了我得到歧义的问题,因为我有 2 个规则导致歧义,一个与user_defined_types有关,另一个与record_names有关
所以让我分解一下
在我尝试解析的数据中,用户可以定义自己的类型,我正确地捕获了它,但是当我尝试在解析器中识别用户定义的类型时,我必须寻找 CNAME CNAME 形式,它在 lark 中被定义为
DIGIT: "0".."9"
LCASE_LETTER: "a".."z"
UCASE_LETTER: "A".."Z"
LETTER: UCASE_LETTER | LCASE_LETTER
CNAME: ("_"|LETTER) ("_"|LETTER|DIGIT)*
好的user_defined_type我的数据以 2 个单独的 CNAMES 的形式出现,所以举个例子 userDefinedType(用户定义类型) userDefinedTypeName
然后尝试在解析器中找到record_name,该规则的形式是
record_name: "end" CNAME
由于记录名称是在记录末尾捕获的,因此当记录关闭并且名称跟随关键字“end”时,end 是我尝试解析的数据中的关键字
歧义的问题在于记录名称的示例 so => end myRecord
这也属于user_defined_type规则,也属于record_name规则,所以这就是我们得到 2 个独立树的地方,歧义我希望它只属于record_name规则,而不是user_defined_type规则
有没有办法修改CNAME来识别除“end”以外的所有字符串,或者有没有办法在我的user_defined_type中添加不同的正则表达式以检查第一个字符串是否不是= end
所以更改user_defined_type:NOT_END CNAME
谁能提出最好的做法以及如何编写一个与除 end 之外的所有字符串匹配的正则表达式
谢谢
答: 暂无答案
评论
end
CNAME
end