- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试为 Handlebars 编写一个 Ruby/Parslet 解析器,但我被 {{ else }}
关键字困住了。为了给那些不使用 Handlebars 的人解释 brieflt,一个 if/else 是这样写的:
{{#if my_condition}}
show something
{{else}}
show something else
{{/if}}
但它变得棘手,因为内联和助手可以使用相同的语法,例如:
Name: {{ name }}
Address: {{ address }}
所以我首先制定了一个规则来识别替换:
rule(:identifier) { match['a-zA-Z0-9_'].repeat(1) }
rule(:path) { identifier >> (dot >> identifier).repeat }
rule(:replacement) { docurly >> space? >> path.as(:item) >> space? >> dccurly}
匹配 {{name}}
或 {{people.name}}
之类的任何内容。问题当然是它也匹配 {{ else }}
block 。以下是我如何编写匹配 if/else block 的规则:
rule(:else_kw) {str('else')}
rule(:if_block) {
docurly >>
str('#if') >>
space >>
path.as(:condition) >>
space? >>
dccurly >>
block.as(:if_body) >>
(
docurly >>
else_kw >>
dccurly >>
block.as(:else_body)
).maybe >>
docurly >>
str('/if') >>
dccurly
}
(注意:docurly 是 {{
,dccurly 是 }}
,block 可以是任何东西)
所以我现在需要重写 `identifier`` 规则,使其匹配任何单词但不匹配“else”。
提前致谢,文森特
最佳答案
一种方法是使用 absent?
前瞻修饰符。 foo.absent?
将匹配如果原子或规则 foo
此时不匹配,并且不消耗任何输入。
有了这个,您可以将 identifier
规则写成
rule(:identifier)
{ (else_kw >> dccurly).absent? >> match['a-zA-Z0-9_'].repeat(1) }
关于ruby - Parslet:识别给定关键字以外的任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28851517/
我已经坚持了好几天了……很抱歉遇到这样的问题,但是我只是F#本身的初学者。由于关于类型提供程序的讨论很多,所以我决定建立一个类型提供程序并撰写一篇有关它的论文。当我开始时,我不知道什么是类型提供程序。
我正在开发LAN项目唤醒功能,但是我想控制局域网中计算机是否打开。但是我不想使用ICMP或WMI(我的网络上有DC)。那么,对于此问题,是否还有其他选择,例如“套接字连接”,请检查特定端口是否正在使用
我们有一个旧的VB6应用程序,该应用程序使用Crystal Reports XI生成打印报告。我们已经通过经验发现,如果Crystal Reports打印引擎选择了错误版本的 usp10.dll (W
我正在尝试获取有效的 Android 权限列表。我知道 http://developer.android.com/reference/android/Manifest.permission.html
嗨,我是 nginx 的新手,我试图在我的服务器(运行 Ubuntu 4)上设置它,它已经运行了 apache。 所以在我 apt-get install 它之后,我尝试启动 nginx。然后我收到这
如何在VB 6中检查对象的类型-除了'TypeName'之外,是否还有其他方法,因为无法通过'TypeName'进行检查,我希望使用类似QuichWatch窗口的方法。 最佳答案 对于对象变量,请使用
我的 JSP 应用程序中有一个错误。发布后我的 session 被清除: YAHOO.util.Connect.asyncRequest('POST', Url, callback, post
我是一名优秀的程序员,十分优秀!