parsing - 如何使用PetitParser匹配dart字符串中的表达式?

标签 parsing dart petitparser

我想使用PetitParserDart解析dart字符串中的embed表达式。

准备一些对象:

class User {
    String name;
}
var user1 = new User()..name="Mike";
var user2 = new User()..name="Jeff";
var user3 = new User()..name="John}}}";
var users = [user1, user2, user3];

长字符串:
var s = """
Hello, this is an embed dart expression below:
  ${
     users.where((u)=>u.name!='Jeff}}}}}}}}')
          .where((u) { return u.name!='{{{John'})
          .map((u)=>u.name).toList()
   }
It's very complex.
"""

您可以看到字符串中有一个${},其内容非常复杂。

我尝试使用这样的petitparser代码:
def("expr_in_string", string('${').ref('expr').char('}'));
def("expr", ????);

但是我不知道如何定义expr规则。它可能包含{},所以我不能简单地使用anyIn('{}').neg()

现在我该怎么做?我觉得这将是一个非常复杂的规则。

最佳答案

我认为如果没有或多或少完整的Dart表达式语法,就无法正确解析所有可能的字符串。您可以编写一个近似值(如您在回答中所做的那样),也可以尝试使用示例随附的Dart语法的表达式产生式。无论哪种情况,生成的语法都很复杂,因为您尝试匹配的事物很复杂。

关于parsing - 如何使用PetitParser匹配dart字符串中的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17251750/

相关文章:

iPhone - GDataXMLNode 和 GDataXMLElement 之间的区别以及如何使用它们

flutter - 如何在 flutter 中打开相机闪光灯?

parsing - 在哪里可以找到使用PetitParser的更多示例?

dart - 如何在PetitParser Dart中向左或向右修剪

c++ - 在特定数量的条目后停止 XML 解析

java - 优化使用 inputstreamreader 的 java 多线程服务器

java - 不同类型的 JSON 数组解析

dart - const 在 Flutter 中定义 EdgeInsets 中的作用

flutter - build 方法多久被调用一次?

smalltalk - PetitParser:如何匹配 token 集