- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Lua 应用程序的一部分是一个搜索栏,我试图让它理解 bool 表达式。我正在使用 LPeg,但当前语法给出了一个奇怪的结果:
> re, yajl = require're', require'yajl'
> querypattern = re.compile[=[
QUERY <- ( EXPR / TERM )? S? !. -> {}
EXPR <- S? TERM ( (S OPERATOR)? S TERM )+ -> {}
TERM <- KEYWORD / ( "(" S? EXPR S? ")" ) -> {}
KEYWORD <- ( WORD {":"} )? ( WORD / STRING )
WORD <- {[A-Za-z][A-Za-z0-9]*}
OPERATOR <- {("AND" / "XOR" / "NOR" / "OR")}
STRING <- ('"' {[^"]*} '"' / "'" {[^']*} "'") -> {}
S <- %s+
]=]
> = yajl.to_string(lpeg.match(querypattern, "bar foo"))
"bar"
> = yajl.to_string(lpeg.match(querypattern, "name:bar AND foo"))
> = yajl.to_string(lpeg.match(querypattern, "name:bar AND foo"))
"name"
> = yajl.to_string(lpeg.match(querypattern, "name:'bar' AND foo"))
"name"
> = yajl.to_string(lpeg.match(querypattern, "bar AND (name:foo OR place:here)"))
"bar"
它只解析第一个标记,我不明白它为什么这样做。据我所知,由于起始非终端末尾的 !.
,部分匹配是不可能的。我该如何解决这个问题?
最佳答案
匹配正在获取整个字符串,但捕获是错误的。注意'->' 的优先级高于串联,因此您可能需要用括号括起来,如下所示:
EXPR <- S? ( TERM ( (S OPERATOR)? S TERM )+ ) -> {}
关于parsing - LPeg 语法怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8844862/
正如标题所说,我正在尝试解析例如 term(A, b, c(d, "e", 7)) 在 Lua 表中 {term, {A, b, {c, {d, "e", 7}}}} 这是我构建的语法: local
我的 Lua 应用程序的一部分是一个搜索栏,我试图让它理解 bool 表达式。我正在使用 LPeg,但当前语法给出了一个奇怪的结果: > re, yajl = require're', require
我正在尝试编写一个 LPeg 模式来匹配以下字符串: 以字母开头 此后包含字母数字字符 不包含两个或多个连续的连字符(例如不允许 test--string) 作为引用,正则表达式 [a-zA-Z](-
要匹配以 dog 开头,后跟 cat(但不使用 cat)的字符串,这是可行的: local lpeg = require 'lpeg' local str1 = 'dogcat' local patt
我正在为 Lua 制作一个序列化库,我正在使用 LPeg 来解析字符串。我已经使用了 K/V 对(使用明确命名的键),但现在我要添加自动索引。 它会像这样工作: @"value" @"value2"
在普通的 PEG(解析表达式语法)中,这是一个有效的语法: values bad argument #2 to '?' (lpeg-pattern expected, got nil) 虽然在这个简
我一直在研究a text editor使用 LPEG 来实现语法高亮支持。启动并运行非常简单,但我只完成了最低限度的要求。 我定义了一堆这样的模式: -- Keywords local keywo
我有一些带有多行块的文本文件,例如 2011/01/01 13:13:13,, Some Certain Text,=, [ certain text [
以下模式(来自 this page )仅匹配带有平衡括号的字符串: b = lpeg.P{ "(" * ((1 - lpeg.S"()") + lpeg.V(1))^0 * ")" } 什么1-在 1
我目前正在熟悉 LPeg 解析器模块。为此,我想将版本字符串(例如 11.4)与 list 进行匹配。 这样的列表是一个具有严格语法的字符串,也可以包含范围。这是一个类似 EBNF,但无论如何都非常简
我正在尝试创建一个 LPeg 模式,该模式将匹配 UTF-8 编码输入中的任何 Unicode 标点符号。我想出了以下 Selene Unicode 和 LPeg 的结合: local unicode
我有一个应用程序(除其他外)支持纯文本搜索和使用 Lua 模式的搜索。为方便起见,该应用程序支持不区分大小写的搜索。这是一个图像片段: 将给定的 Lua 模式转换为不区分大小写的 Lua 模式的代码不
我有一个应用程序(除其他外)支持纯文本搜索和使用 Lua 模式的搜索。为方便起见,该应用程序支持不区分大小写的搜索。这是一个图像片段: 将给定的 Lua 模式转换为不区分大小写的 Lua 模式的代码不
我正在努力了解 LPEG。我已经设法生成了一种语法,它可以满足我的要求,但我一直在努力反对这个语法,但并没有走得太远。这个想法是解析一个文档,它是 TeX 的简化形式。我想将文档拆分为: 环境,它们是
ATM 我正在尝试从我的应用程序执行 lua 文件,这适用于基本的 lua。我正在使用 borland 编译器(builder 3,只是不要问 >.<) 现在我正尝试通过 re 模块使用 lpeg
我已经使用 apt-get update 和 apt-get upgrade 更新了我的 Kali Linux 2.0。 从那时起,nmap 就不再为我工作了。 我在命令行收到以下错误: root@k
所以我在玩 lpeg 来代替 boost 精神语法,我必须说 boost::spirit 比 lpeg 更优雅和自然。然而,由于当前 C++ 编译器技术的限制和 C++ 中的 TMP 问题,它很难使用
我是一名优秀的程序员,十分优秀!