📄 t_util.t.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 + -