Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 我如何创建一个解析器,它使用一个同样位于开头和结尾的字符_Dart_Petitparser - Fatal编程技术网

Dart 我如何创建一个解析器,它使用一个同样位于开头和结尾的字符

Dart 我如何创建一个解析器,它使用一个同样位于开头和结尾的字符,dart,petitparser,Dart,Petitparser,我如何创建一个解析器,允许一个字符恰好与开始/结束字符相同。使用以下示例: “不是很热吗” 第二个单引号应被接受为介于单引号开头和结尾之间的内容的一部分。我创建了这样一个解析器: char(“”).seq((word()| char(“”)| whitespace()).plus()).seq(char(“”)) 但它失败的原因是: 失败[1:15]:“应为“.” 如果我使用“any()| char(“”),那么它会贪婪地使用结尾的单引号,从而导致错误 我需要创建一个实际的语法类吗?我尝试

我如何创建一个解析器,允许一个字符恰好与开始/结束字符相同。使用以下示例:

“不是很热吗”
第二个单引号应被接受为介于单引号开头和结尾之间的内容的一部分。我创建了这样一个解析器:

char(“”).seq((word()| char(“”)| whitespace()).plus()).seq(char(“”))
但它失败的原因是:

失败[1:15]:“应为“.”
如果我使用“any()| char(“”),那么它会贪婪地使用结尾的单引号,从而导致错误

我需要创建一个实际的语法类吗?我尝试创建一个,但不能弄清楚如何制作一个不贪婪地消耗结束标记的解析器。

问题是贪婪和盲目。这意味着重复消耗尽可能多的输入,但不考虑随后发生的事情。直到输入结束的所有内容都被消耗,但是序列中的最后一个引号将无法再匹配

您可以使用非盲变量来解决此问题:

char(“”)
.seq((word()| char(“”)| whitespace()).plusGreedy(char(“”))
.seq(字符(“”);
只要仍有
char(“”),就会消耗输入

左后可被消费。

问题是贪婪和盲目。这意味着重复消耗尽可能多的输入,但不考虑随后发生的事情。在你的例子中,输入到结束的所有东西都被消耗掉了,但是序列中的最后一个引用不能再匹配了。

您可以使用非盲变量来解决此问题:

char(“”)
.seq((word()| char(“”)| whitespace()).plusGreedy(char(“”))
.seq(字符(“”);

只要仍有
char(“”),就会消耗输入< /代码>左边,以后可以被消费。

我会说,这个问题的一般解决方法是引用中间的单引号。例如,参见C *的逐字串语法:我会说,这个问题的一般解决方案是需要引用中间的单引号。字符串语法: