首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析表达式语法:检测下一个令牌?

解析表达式语法:检测下一个令牌?
EN

Stack Overflow用户
提问于 2014-08-05 06:20:31
回答 2查看 405关注 0票数 0

我从PEG.js开始做聚乙二醇。

考虑以下两个规则的语法:

代码语言:javascript
运行
复制
name
  = name:.* {return name.join("")}

put
  = "put " a:name " into " b:name "." {put(a,b)}

我希望能够传递这个解析器"put foo into bar“。并使put("foo","bar")对其进行评估。

但是PEG.js给出了错误Expected " into " or any character but end of input found.

在最后?

我怎样才能实现我想要的东西?

编辑:正则表达式/put (.*) into (.*)/g按照我想要的方式工作--如果我向它传递"put foo into bar",它就会给我$1="foo"$2="bar"

EN

回答 2

Stack Overflow用户

发布于 2014-08-05 19:30:55

我非常确定"themirror“是正确的--第一条规则会吃掉所有的输入。在没有这个规则的情况下尝试一下。

此外,您还应该有另一个允许任意空格的规则。我在网上找到这个..。

代码语言:javascript
运行
复制
_
  = [ \r\n\t]*

下划线将匹配任意数量的空格字符。然后您可以将您的规则重写为...

代码语言:javascript
运行
复制
put
   = "put" _ a:name _ "into" _  b:name _  "." {put(a,b)}
票数 1
EN

Stack Overflow用户

发布于 2014-10-11 10:32:56

对不起,我的英语不好。

第一条规则.*尝试读取每个字符,因此到达文件末尾。

您可以使命名规则更具体(任何字符,但不包括空格或点):

代码语言:javascript
运行
复制
name = [^ .]+

这个有效..。但不是因为名字里面有空格。

代码语言:javascript
运行
复制
put = "put " a:name " into " b:name "." {put(a,b);}

name = c:[^ .]+ {return c.join("");}

对于Node.js

代码语言:javascript
运行
复制
var PEG = require('pegjs');
var text = 'put foo into bar.';
var parser = PEG.buildParser('{function put(a,b){ console.log(a,b); }}put = "put " a:name " into " b:name "." {put(a,b);}\nname = c:[^ .]+ {return c.join("");}');
parser.parse(text);

对于名称中的空格,我没有很好的解决方案,但可以尝试如下所示:

代码语言:javascript
运行
复制
nameBeforeInto = (!" into ".)+

nameBeforeDot = [^.]+

put = "put " nameBeforeInto " into " nameBeforeDot "."

nameBeforeInto返回多维数组

法布里斯

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

https://stackoverflow.com/questions/25128488

复制
相关文章

相似问题

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