PEG.js允许两个标签之间的任何文本

时间:2018-06-12 11:10:55

标签: javascript parsing compiler-construction peg

我无法定义允许两个标签之间的任何文本(包括那些标签)的表达式。

示例:

#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"

但它效果不好,最后在最后一个结束后消耗了更多的文字。

祝你好运

1 个答案:

答案 0 :(得分:1)

内部部分可以是另一个#ifdefSourceCharacter重复,因此这两个部分都需要在括号中。

尝试以下几点:

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

SourceCharacter = .

_ = [\s\n]