我想使用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/