首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PEG.js忽略空格

使用PEG.js忽略空格
EN

Stack Overflow用户
提问于 2011-11-24 12:37:20
回答 1查看 6.3K关注 0票数 21

我想用我的语法忽略空格和新行,所以它们在PEG.js输出中缺失了。此外,方括号中的文字应该在一个新数组中返回。

语法

代码语言:javascript
运行
复制
start
  = 'a'? sep+ ('cat'/'dog') sep* '(' sep* stmt_list sep* ')'

stmt_list
  = exp: [a-zA-Z]+ { return new Array(exp.join('')) }

sep
  = [' '\t\r\n]

测试用例

代码语言:javascript
运行
复制
a dog( Harry )

输出

代码语言:javascript
运行
复制
[
   "a",
   [
      " "
   ],
   "dog",
   [],
   "(",
   [
      " "
   ],
   [
       "Harry"
   ],
   [
      " "
   ],
   ")"
]

输出我想要

代码语言:javascript
运行
复制
[
   "a",
   "dog",
   [
      "Harry"
   ]
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-24 13:24:26

您必须更多地拆分语法,使用更多的“非终端”(不确定这是否是PEG中的名称):

代码语言:javascript
运行
复制
start
  = article? animal stmt_list

article
  = article:'a' __ { return article; }

animal
  = animal:('cat'/'dog') _ { return animal; }

stmt_list
  = '(' _ exp:[a-zA-Z]+ _ ')' { return [ exp.join('') ]; }

// optional whitespace
_  = [ \t\r\n]*

// mandatory whitespace
__ = [ \t\r\n]+

谢谢你问这个问题!

编辑:增加可读性,有两个产品:___

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8257184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档