⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ll1_eval.t.svn-base

📁 这是一个DFA简化和生成LL(1)分析表的程序,自动生成表格及图形
💻 SVN-BASE
字号:
# LL1_eval.t# Test LL1::Evaluse Test::Base;use LL1_parser;use LL1_eval;plan tests => 2 * blocks() + 14;my $Ast;#$::LL1_TRACE = 1;#$::LL1::Table::Trace = 1;$::LL1_QUIET = 1;filters {    offset => ['chomp'],    error  => ['chomp'],};run {    my $block = shift;    my $name = $block->name;    my $parser = LL1::Parser->new;    if ($block->grammar) {        $Ast = $parser->parse($block->grammar);        ok defined $Ast, "$name - grammar parsing okay";    }    my $input = $block->input;    #warn "BBB @$X::tokens";    my $match = LL1::Eval->eval($Ast, $input);    #warn "!!! @$X::tokens";    if (defined $block->error) {        ok !defined, "$name - input parsing failed as expected";        is( LL1::Eval->error, $block->error,            "$name - input parsing diagnostics" );        is( LL1::Eval->offset(), $block->offset,            "$name - input parsing offset" );    } else {        ok defined $match, "$name - input parsing okay";        if (!defined $match and !defined $block->error) {            warn "$name - input parsing error:\n  ",                LL1::Eval->error, "\n";        }        is $X::pos, length($input), "$name - input buffer consumed";        if (defined $block->match) {            is $match, $block->match, "$name - match object okay";        }    }};__DATA__=== TEST 1: basic--- grammar# This is an identifieridentifier: /[A-Za-z]\w*/--- input foo32=== TEST 2:--- input  12--- errorWas expecting identifier, but found '12' instead--- offset0=== TEST 3:--- grammarS: '(' S ')' S | '' # empty token--- input()=== TEST 4:--- input (  )=== TEST 5:--- input(--- errorWas expecting ')', but found EOF instead--- offset1=== TEST 6:--- input() ( )=== TEST 7:--- input(( ) )=== TEST 8:--- input(()())()=== TEST 9: if statement--- grammar  # rule for statement:statement: if_stmt         | /\w+/  # other # rule for if_stmt:if_stmt  : 'if' '(' exp ')' statement else_part # rule for else_part:else_part: 'else' statement         | # rule for exp:exp      : '0' | "1"--- inputif (0) other=== TEST 10:--- inputif (0) if (1) cry else laugh=== TEST 11: if statement grammar with bogus production order--- grammarstatement: /\w+/         | if_stmtif_stmt  : 'if' '(' exp ')' statement else_partelse_part: "else" statement         |exp      : '0' | '1'--- inputif (0) other=== TEST 12: if statement grammar with bogus production order--- grammarstatement: /\w+/         | if_stmtif_stmt  : 'if' '(' exp ')' statement else_partelse_part: "else" statement         |exp      : '0' | '1'<token: 'if' '(' ')' "else" '0' '1' /\w+/>--- inputif (0) other=== TEST 13: Logical expressions--- grammarroot: exprexpr: and_expr expr_expr_: 'OR' expr     |and_expr:   not_expr and_expr_and_expr_: 'AND' and_expr         |not_expr: 'NOT' brack_expr        | brack_exprbrack_expr: '(' expr ')'          | atomatom: 'T'    | 'F'--- inputF OR (T AND (F OR F)) OR F=== TEST 14:--- inputT=== TEST 15:--- inputF AND (T OR F--- errorWas expecting ')', but found EOF instead--- offset13=== TEST 16:--- inputNOT 32--- errorWas expecting brack_expr, but found '32' instead--- offset3=== TEST 17:--- inputNOT F=== TEST 18: equivalent regex conflicts--- grammarfloat: /\d+/ '.' /[0-9]+/--- input3.14=== TEST 19: equivalent regex conflicts (II)--- grammarassignment: var ':=' expvar: /[A-Za-z]\w*/exp: /\d+/   | /[a-zA-Z]\w*/--- inputa := b=== TEST 20: strings of common prefix--- grammarstmt: 'if'    | varvar: /[A-Za-z]\w*/--- inputif_stmt=== TEST 21: lexer bug--- grammarif_stmt: var ':=' expr 'if' expr ';'var: /[A-Za-z]\w*/expr: /\d+/--- inputfoo := 32 if 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -