作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像下面这样的 mysql 架构:
data: {
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT '' COMMENT 'the name',
`content` text COMMENT 'something',
}
["id" "int" "" "name" "varchar" "the name" "content" "text" "something" ]
parse data [
any [
thru {`} copy field to {`} {`}
thru some space copy field-type to [ {(} | space]
(comm: "")
opt [ thru {COMMENT} thru some space thru {'} copy comm to {'}]
(repend temp field repend temp field-type either comm [ repend temp comm ][ repend temp ""])
]
]
["id" "int" "the name" "content" "text" "something"]
opt ..
是不正确的。
COMMENT
先关键字,再提取评论信息;如果首先找到lf,则继续下一个循环。 但是我不知道怎么表达。任何人都可以帮忙吗?
最佳答案
我非常喜欢(在可能的情况下)用肯定的术语来构建一组语法规则来匹配目标输入——我发现它更有文字、更精确、更灵活并且更容易调试。在上面的代码段中,我们可以确定五个核心组件:
space: use [space][
space: charset "^-^/ "
[some space]
]
word: use [letter][
letter: charset [#"a" - #"z" #"A" - #"Z" "_"]
[some letter]
]
id: use [letter][
letter: complement charset "`"
[some letter]
]
number: use [digit][
digit: charset "0123456789"
[some digit]
]
string: use [char][
char: complement charset "'"
[any [some char | "''"]]
]
result: collect [
parsed?: parse/all data [ ; parse/all for Rebol 2 compatibility
opt space
some [
(field: type: none comment: copy "")
"`" copy field id "`"
space
copy type word opt ["(" number ")"]
any [
space [
"COMMENT" space "'" copy comment string "'"
| word | "'" string "'" | number
]
]
opt space "," (keep reduce [field type comment])
opt space
]
]
]
if parsed? [new-line/all/skip result true 3]
new-line
的一个小应用来让事情变得更聪明一点应该会产生:
== [
"id" "int" ""
"name" "varchar" "the name"
"content" "text" "something"
]
关于parsing - 如何用 Rebol PARSE 方言表达分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30423040/
我是一名优秀的程序员,十分优秀!