【问题标题】:PEG.js Allow any text between two tagsPEG.js 允许两个标签之间的任何文本
【发布时间】:2018-06-12 11:10:54
【问题描述】:

我在定义允许两个标签(包括那些标签)之间的任何文本的表达式时遇到问题。

例子:

#ifdef
 asdasdasdasdasdsasd
asdasdasdasdasdasdasd
asdasdasdasdasdasasd
#endif

它也应该允许

#ifdef
asdasdasd
asdasdsad
#ifdefasdasdasd
asdasdasd
#endif#endif
asdasdasd
asdasdasd
#endif

如您所见,只要它以#ifdef 和endif 开头和结尾,里面的任何文本都可以。

谁能帮我创建这样的表达式?

到目前为止我尝试的是这样的:

H_IF_IGNORE 
= ("#ifdef) _
  H_IF_IGNORE / (!"#endif"i SourceCharacter)*
  "#endif"

但它运行得不是很好,最终在最后一个 endif 之后消耗了更多的文本。

最好的问候

【问题讨论】:

    标签: javascript parsing compiler-construction peg


    【解决方案1】:

    inner 部分可以是另一个#ifdef 或重复的SourceCharacter,所以两个部分都需要放在括号中。

    尝试以下方法:

    H_IF_IGNORE
    = "#ifdef" _*
      (H_IF_IGNORE / (!"#endif" SourceCharacter))* _*
      "#endif"
    
    SourceCharacter = .
    
    _ = [\s\n]
    

    【讨论】:

    • 谢谢!我会试试这个,让你知道结果。
    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 2011-12-31
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多