首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PetitParser与Parentheses

PetitParser与Parentheses
EN

Stack Overflow用户
提问于 2021-06-23 18:48:30
回答 1查看 111关注 0票数 1

对不起,我遇到了另一个关于使用PetitParser的问题。我已经解决了我的递归问题,但是现在我遇到了括号的问题。如果我需要能够解析以下两个表达式:

(使用= "official").empty()'

  • '(( 5+ 5) *5)+ 5'

我试过做以下几件事:

代码语言:javascript
复制
final expression = (char('(') & any().starGreedy(char(')')).flatten() & char(')')).map((value) => ParenthesesParser(value));

但这并不适用于第一个表达式。如果我试试这个:

代码语言:javascript
复制
final expression = (char('(') & any().starLazy(char(')')).flatten() & char(')')).map((value) => ParenthesesParser(value));

它不适用于第二个表达式。对于如何解析两者,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-24 18:24:17

我认为这两个解析器都不符合您的要求:第一个解析器(带有starGreedy的贪婪解析器)将消耗到最后一个结束括号。第二个解析器(带有starLazy的懒散解析器)将使用最多第一个结束括号。

要解析一个平衡的括号,您需要递归,以便每个开口括号后面跟着一个匹配的结束括号:

代码语言:javascript
复制
final inner = undefined();
final parser = char('(') & inner.star().flatten() & char(')');
inner.set(parser | pattern('^)'));

在上面的片段中,内部解析器正在递归地尝试解析另一个括号对,否则它只会使用任何不是结束括号的字符。

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

https://stackoverflow.com/questions/68105573

复制
相关文章

相似问题

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