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语句可能更适合这个特殊的问题,实际上更复杂。我想回答这个问题。但关键是,有一个默认类别,不解析的东西就属于这个类别。