Parsing 与Clojure Instaparse匹配任何内容
我想解析一种简单的语言,它基本上在一行文本前有两个特殊的字形或字符。如果它没有这些,那么这行文本只是作为数据 例如:Parsing 与Clojure Instaparse匹配任何内容,parsing,clojure,instaparse,Parsing,Clojure,Instaparse,我想解析一种简单的语言,它基本上在一行文本前有两个特殊的字形或字符。如果它没有这些,那么这行文本只是作为数据 例如: + hfflsdjf dslfhsldfh sdlfkh sdlfkhs ! sdlfkhsdl sdfb sldflsdfh sldkfh sd dsf sldfbbsf sdfjbs kfjbsd kjbsdf 第一行和第二行有特殊的含义,因为+和!在前端,行的其余部分是该指令的数据。但第三行只是数据 我怎样才能用Instaparse表达这一点 基本上,我想说的是,任何
+ hfflsdjf dslfhsldfh sdlfkh sdlfkhs
! sdlfkhsdl sdfb sldflsdfh sldkfh sd
dsf sldfbbsf sdfjbs kfjbsd kjbsdf
第一行和第二行有特殊的含义,因为+和!在前端,行的其余部分是该指令的数据。但第三行只是数据
我怎样才能用Instaparse表达这一点
基本上,我想说的是,任何其他规则都不匹配的字符串都应该由数据终端匹配。(def as and bs
(def as-and-bs
(insta/parser
"<text> = (rubbish | op ) *
<op> = plus | bang
<line> = #'[^\n]*(\n|$)'
rubbish = line
plus = '+' line
bang = '!' line"))
(as-and-bs "+ abc\n! def\ncu ")
;=> ([:plus "+" " abc\n"] [:bang "!" " def\n"] [:rubbish "cu "])
(insta/parser)
“=(垃圾| op)*
=正|砰
=#'[^\n]*(\n |$)'
垃圾=线
加号=“+”行
bang=“!”行“))
(as和bs“+abc\n!def\ncu”)
;=> ([:plus“+”abc\n”][:bang”!“def\n”][:垃圾“cu”])
您尝试了什么?我不确定我是否会用instaparse来解决这个问题。似乎您可以仅根据第一个字符来决定如何处理整个数据。switch语句可能更适合这个特殊的问题,实际上更复杂。我想回答这个问题。但关键是,有一个默认类别,不解析的东西就属于这个类别。