parsing - 用 Clojure Instaparse 匹配任何东西
问题描述
我想解析一种简单的语言,它基本上在一行文本前面有几个特殊的字形或字符。如果它没有这些,那么文本行就被当作数据。
例如 :
+ hfflsdjf dslfhsldfh sdlfkh sdlfkhs
! sdlfkhsdl sdfb sldflsdfh sldkfh sd
dsf sldfbbsf sdfjbs kfjbsd kjbsdf
第一行和第二行有特殊含义,因为 + 和 ! 在前面,该行的其余部分是该指令的数据。但第三行只是数据。
我如何在 Instaparse 中表达这一点?
基本上我想说任何其他规则都不匹配的字符串应该由 DATA 终端匹配。
解决方案
(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 "])
推荐阅读
- python - python中的多变量线性化:'Pow'对象没有属性'sqrt'
- javascript - 如何根据保存在数据库中的文件路径下载文件?
- objective-c - 为 OS X 编写具有多个面板的应用程序
- symfony - 发布后的 api 平台错误 提供的值无效(IRI 无效?)
- postgresql - 用于分布式环境的 Broadleaf Ehcache 到 Redis
- javascript - JavaScript“获取中间字母”代码战挑战的三元运算符函数
- php - 如何在不重新排列索引的情况下使用键 DESC 对多维 PHP 数组进行排序(可以删除这些元素)
- vue.js - 是否可以使用 Vue-sweetalert2 html 作为 vue 组件?
- rxjs - RxJS v5+ 中的 Observable.transduce 发生了什么?
- excel - 在循环 VBA 中查找函数