首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Marpa解析器似乎不能处理可选的第一个符号?

Marpa解析器似乎不能处理可选的第一个符号?
EN

Stack Overflow用户
提问于 2013-09-05 11:09:21
回答 1查看 570关注 0票数 5

我一直在处理Marpa解析器,当第一个符号是可选的时,我遇到了一个问题。下面是一个例子:

代码语言:javascript
复制
use strict;
use warnings;
use 5.10.0;

use Marpa::R2;
use Data::Dump;

my $grammar = Marpa::R2::Scanless::G->new({source  => \<<'END_OF_GRAMMAR'});
:start ::= Rule
Rule ::= <optional a> 'X'
<optional a> ~ a *
a ~ 'a'
END_OF_GRAMMAR

my $recce = Marpa::R2::Scanless::R->new({grammar => $grammar});
dd $recce->read(\"X");

当我运行这个程序时,我会得到以下错误:

代码语言:javascript
复制
Error in SLIF parse: No lexemes accepted at line 1, column 1
* String before error:
* The error was at line 1, column 1, and at character 0x0058 'X', ...
* here: X
Marpa::R2 exception at small.pl line 20
 at /usr/local/lib/perl/5.14.2/Marpa/R2.pm line 126
        Marpa::R2::exception('Error in SLIF parse: No lexemes accepted at line 1, column 1\x{a}...') called at /usr/local/lib/perl/5.14.2/Marpa/R2/Scanless.pm line 1545
        Marpa::R2::Scanless::R::read_problem('Marpa::R2::Scanless::R=ARRAY(0x95cbfd0)', 'no lexemes accepted') called at /usr/local/lib/perl/5.14.2/Marpa/R2/Scanless.pm line 1345
        Marpa::R2::Scanless::R::resume('Marpa::R2::Scanless::R=ARRAY(0x95cbfd0)', 0, -1) called at /usr/local/lib/perl/5.14.2/Marpa/R2/Scanless.pm line 926
        Marpa::R2::Scanless::R::read('Marpa::R2::Scanless::R=ARRAY(0x95cbfd0)', 'SCALAR(0x95aeb1c)') called at small.pl line 20

Perl版本5.14.2 (debian喘息)

Marpa版本2.068000

(我看到有一个全新的Marpa 2.069,我还没有试过)

这是我语法上做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-05 11:19:51

在Marpa Scanless中,您的语法有两个级别:主要的、高级别的语法,您可以在其中属性动作之类的,以及低级的词法语法。它们是独立执行的(如果您使用了传统的解析器/词汇器,这是预料中的,但是当您从regexes到Marpa时非常混乱)。

现在,在低级语法中,Marpa将输入识别为单个X,而不是“零a,然后是X”。然而,高级语法要求存在optional a符号.

最好的方法是让a在高级语法中是可选的:

代码语言:javascript
复制
<optional a> ::= <many a>
<optional a> ::=  # empty

<many a> ~ a*  # would work the same here with "a+"
a ~ 'a'
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18634749

复制
相关文章

相似问题

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