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

标签 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"

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

最好的问候

最佳答案

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

按照这些思路尝试一些事情:

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

SourceCharacter = .

_ = [\s\n]

关于javascript - PEG.js 允许两个标签之间的任何文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50815740/

相关文章:

javascript - 为什么即使没有 salt 参数,哈希比较输出也为 true?

javascript - 用javascript解析json结构

ios - 为什么我不能在 Swift 中重新分配实例方法?

vb.net - 为什么在 VB.NET 中传递 "Me"ByRef 是合法的?

javascript - 在严格模式下实现智能/自覆盖/惰性 setter/getter

javascript - 从文件中读取文本时强制调整大小

javascript - 为什么javascript绑定(bind)不起作用

java - 在java中解析字符串数组

JavaScript 在使用 blob 构造函数时剪切长数值

ruby - 如何为从虚构语言解析的 AST 树生成代码?