问题标签 [marpa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
134 浏览

regex - 使用 MARPA :: R2 perl 解析双引号字符串

我正在使用 MARPA::R2 实现解析器。

我有一个G1 rule喜欢:

喜欢L0 rule

使用REGEX_STRING,我试图解析用双引号括起来的字符串,但是正则表达式有问题。另外,我想删除双引号,只保留引号之间的内容。

所以,如果我使用下面的代码输入:

其他示例:“bar123”、“foo(123)”等。

0 投票
2 回答
100 浏览

regex - 如何使用 MARPA:R2 perl 从大表达式中解析/识别双引号字符串

从大表达式解析/识别双引号字符串时出现问题。

my $input1 = "func(foo)&func(bar)";-> 能够通过将 foo 和 bar 解析为 STRING LEXEME 来正确解析它。

my $input2 = "\"foo\"";-> 在这里,我想将 foo 解析为 regex_string LEXEME。REGEX_STRING 是用双引号括起来的东西。

my $input3 = "func(\"foo\") - func(\"bar\")";-> 这里,func 应该被当作 func LEXEME,( 应该是 LPAREN,) 应该是 RPAREN,foo 作为 REGEX_STRING,- 作为 OP 和 func(\"bar\") 相同

my $input4 = "func(\"foo\")";-> 此处,func 应视为 func LEXEME,( 应为 LPAREN,) 应为 RPAREN,foo 应为 REGEX_STRING

我尝试了什么: 第一种方法: 我的 REGEX_STRING 应该是:REGEX_STRING -> ~ '\"([^:]*?)\"'

如果我尝试将上面REGEX_STRING的代码放入带有输入表达式的代码中,my $input4 = "func(\"foo\")";则会出现如下错误:

SLIF 解析中的错误:在第 1 行第 5 列找不到词位 * 错误前的字符串:func(* 错误出现在第 1 行第 5 列和字符 0x0022 '"', ... * 此处:"foo") Marpa::R2 异常

方法二:

尝试包括如下规则:

这里的问题是->输入是使用:

my $input4 = "func(\"foo\")";

所以,这里它给出了错误,因为现在有两种方法来解析这个表达式,或者双引号之间的整个东西是 func(\"foo\") 被当作 QUOTED_STRING 或者 func 应该被当作 func LEXEME 等等。

请帮助我如何解决这个问题。

0 投票
1 回答
137 浏览

perl - 使用 Marpa::R2 实现的解析器中的异常处理

我已经使用 Marpa::R2 实现了一个解析器。代码如下所示:

我在一个 .t 文件中有大量测试用例,我运行这些测试用例来测试我的解析器。因此,如果任何输入表达式中出现任何异常,测试不应该在中间停止,它应该为给出错误的那个(使用异常处理)提供正确的错误消息,并且其余的测试用例应该运行。

我想在这个解析器中进行异常处理。如果即使在对输入表达式进行标记时出现任何类型的异常,我想向用户显示适当的消息,说明位置、字符串等或任何更多详细信息以显示错误出现的位置。请帮忙。

我想做正确的错误处理,例如:http: //blogs.perl.org/users/jeffrey_kegler/2012/10/a-marpa-dsl-tutorial-error-reporting-made-easy.html

我不知道如何将所有这些东西放在适当的位置。

0 投票
3 回答
99 浏览

perl - 使用 Marpa:r2 perl 解析单引号字符串

如何使用 Marpa:r2 解析单引号字符串?在我下面的代码中,单引号字符串在解析时附加了“\”。

代码:

输出:

以上是所有输入的输出,我不希望第三个附加“\”和单引号。我希望它像 OUTPUT2 一样被解析。请指教。

理想情况下,它应该只根据 Param ::= (') Quoted (') 选择单引号之间的内容