如何解决如何将关键字与害虫进行匹配?
我正在尝试解析这样的一行
MyTupleComponent str,str
有语法
cname = _{ (ASCII_ALPHANUMERIC | "_")+ }
ints = { "i8" | "i16" | "i32" | "i64" | "i128" | "isize" }
uints = { "u8" | "u16" | "u32" | "u64" | "u128" | "usize" }
strings = { "str" | "String" }
types = { strings | ints | uints }
tuple_component = { cname ~ (types ~ ("," ~ types)?)+ }
但最终是
Err(Error { variant: ParsingError { positives: [types],negatives: [] },location: Pos(20),line_col: Pos((1,21)),path: None,line: "MyTupleComponent str,str",continued_line: None })
有人知道为什么规则不正确匹配吗?
解决方法
你可以走两条路:
正如@ZachThompson 指出的那样,定义 WHITESPACE
。如果这样做,请将 cname
设为原子,以防止它捕获字母数字和空格。
这个测试语法看起来不错:
WHITESPACE = _{ " " }
cname = @{ (ASCII_ALPHANUMERIC | "_")+ }
ints = { "i8" | "i16" | "i32" | "i64" | "i128" | "isize" }
uints = { "u8" | "u16" | "u32" | "u64" | "u128" | "usize" }
strings = { "str" | "String" }
types = { strings | ints | uints }
tuple_component = { cname ~ (types ~ ("," ~ types)?)+ }
file = { tuple_component ~ EOI }
否则,您可以手动计算空间。这种方法也可以,但不能随着语法的增长而扩展。
附言您是否打算解析 MyTupleComponent str,str str,str
之类的表达式,而不用逗号将第二个元组与第一个元组分开?它目前解析得很好。您可能希望将规则简化为
tuple_component = { cname ~ types ~ ("," ~ types)* }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。