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

📄 t_util.t.svn-base

📁 这是一个DFA简化和生成LL(1)分析表的程序,自动生成表格及图形
💻 SVN-BASE
字号:
# t_Util.t# Test t::Utiluse strict;use warnings;use Test::More tests => 5;use Set::Scalar;use t::Util qw( parse_grammar dump_fsets dump_LL1_table );###  Test parse_grammar## Test 1#my $expect_ast = {    startrule => 'exp',    rules => {        exp    => [ ['exp', 'addop', 'term'], ['term'] ],        addop  => [ ["'+'"], ["'-'"]],        term   => [ ['term', 'mulop', 'factor'], ['factor'] ],        mulop  => [ ["'*'"] ],        factor => [ ["'('", 'exp', "')'"], ["'number'"] ],    },};my $ast = parse_grammar(<<EOC); exp : exp addop term | term addop: '+' | '-' term :term mulop  factor  |factor mulop: '*' factor: '(' exp ')' | 'number'EOCis_deeply($ast, $expect_ast, 'AST ok');## Test 2#$expect_ast = {    startrule => 'A',    rules => {        A => [ [] ],        B => [ ["''"] ],        C => [ ["'abc'"], [] ],        D => [ ["'D'"], ["''"] ],    },};$ast = parse_grammar(<<EOC);A:B: ''C: 'abc' |D: 'D' | ''EOCis_deeply($ast, $expect_ast, 'AST with nulls ok');###  Test dump_fsetssub set {    Set::Scalar->new(@_);}my $expect = <<EOC;addop: '+' '-'exp: '(' 'number'factor: '(' 'number'mulop: '*'term: '(' 'number'EOCmy $got = dump_fsets(    {        addop  => set(qw/ '+' '-'/),        exp    => set(qw/ '(' 'number' /),        factor => set(qw/ '(' 'number' /),        mulop  => set(qw/ '*' /),        term   => set(qw/ '(' 'number' /),    });is($got, $expect, 'Dump string ok');##$expect = <<'EOC';B: $ '2' '3'EOC$got = dump_fsets(    {         B => set(LL1::eof, qw[ '2' '3' ])    });is $got, $expect, 'Dump $ ok';## Test sub dump_LL1_table#my $table = {    'S' => {        q/'('/ => [ qw/'(' S ')' S/ ],        q/')'/ => [],        LL1::eof => [ qw/''/ ],    },    'exp' => {        q/'a'/ => [ 'E' ],    },};$got = dump_LL1_table($table);$expect = <<'_EOC_';S  $: S -> ''  '(': S -> '(' S ')' S  ')': S ->exp  'a': exp -> E_EOC_is $got, $expect, 'dump_LL1_table ok';

⌨️ 快捷键说明

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