标签: parse-recdescent

使用Parse :: RecDescent解析带有嵌套括号的字符串

我正在尝试使用Parse::RecDescentmake解析器来解析括号表达式和一元运算符?.

到目前为止,我创建解析器时失败了,因为规则expression是左递归的:

use strict;
use warnings;
use Parse::RecDescent;

my $test = <<END;
((foo)? bar)
END

my $grammar = q(
    parse: expression(s)
    expression: string | parend | expression(s)
    parend : "(" (string | expression) ")" /\??/
    string : /\w+/ /\??/

);
my $parser = Parse::RecDescent->new($grammar);
my $result = $parser->parse($test);
if($result){
    print $result;
}else{
    print STDERR "Invalid grammar\n";
}
Run Code Online (Sandbox Code Playgroud)

perl parsing parentheses parse-recdescent

3
推荐指数
1
解决办法
963
查看次数

Parse :: RecDescent - 从中​​获取信息

我正在使用Perl中的Parse :: RecDescent解析器,我似乎有最糟糕的时间从它获取信息.在线提供的信息似乎没有非平凡的例子.

这是代码:

event_function: object_list ':' event_list ';'
        <defer:
        {       #item is a special character with Parse::Recdescent.
            print Dumper($item{object_list});
            $return = $item[1];
        }
        >
        | object_list ':' ';'
        <defer:
        { 
            print Dumper($item{object_list});
            $return = $item[1];
        }
        >
Run Code Online (Sandbox Code Playgroud)

这是输出

PS W:\developers\paulnathan\rd_dir> perl parser.pl testfile
$VAR1 = 4;
$VAR1 = 8;
PS W:\developers\paulnathan\rd_dir>
Run Code Online (Sandbox Code Playgroud)

输入文件正确解析.

stuff, stuff2: pre-operation event = {foo1, foo2};
Run Code Online (Sandbox Code Playgroud)

应该输出一个由"stuff","stuff2"键入的哈希值.

思考?

编辑:

object_list : 
        object ',' object_list
        <defer:
        {

            my $retval = ();
            $retval = …
Run Code Online (Sandbox Code Playgroud)

perl parse-recdescent

1
推荐指数
1
解决办法
460
查看次数

标签 统计

parse-recdescent ×2

perl ×2

parentheses ×1

parsing ×1