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

📄 first_follow.t.svn-base

📁 这是一个DFA简化和生成LL(1)分析表的程序,自动生成表格及图形
💻 SVN-BASE
字号:
# first_follow.t# Test First/Follow sets generatorsuse Test::Base;use t::Util qw/ parse_grammar dump_fsets /;use LL1_table;plan tests => 2 * blocks();#$LL1::Table::Trace = 1;run {    my $block = shift;    my $name = $block->name;    my $ast = parse_grammar($block->grammar);    my $fi_sets = LL1::Table::first_sets($ast);    is dump_fsets($fi_sets), $block->first_sets, "$name - First sets";    my $fo_sets = LL1::Table::follow_sets($ast, $fi_sets);    is dump_fsets($fo_sets), $block->follow_sets, "$name - Follow sets";};__DATA__=== TEST 1: all items nullable--- grammarA: B C DB: '1' | ''C: '2' | ''D: '3' | ''--- first_setsA: '' '1' '2' '3'B: '' '1'C: '' '2'D: '' '3'--- follow_setsA: $B: $ '2' '3'C: $ '3'D: $=== TEST 2: Only the first 2 items nullable--- grammarA: B C DB: '1' | ''C: '2' | ''D: '3'--- first_setsA: '1' '2' '3'B: '' '1'C: '' '2'D: '3'--- follow_setsA: $B: '2' '3'C: '3'D: $=== TEST 3: ditto (antoher form of grammar)--- grammarA: B C DB: '1' |C: '2' |D: '3'--- first_setsA: '1' '2' '3'B: '' '1'C: '' '2'D: '3'--- follow_setsA: $B: '2' '3'C: '3'D: $=== TEST 4: Only the first item nullable--- grammarA: B C DB: '1' | ''C: '2'D: '3'--- first_setsA: '1' '2'B: '' '1'C: '2'D: '3'--- follow_setsA: $B: '2'C: '3'D: $=== TEST 5: no item is nullable--- grammarA: B C DB: '1'C: '2'D: '3'--- first_setsA: '1'B: '1'C: '2'D: '3'--- follow_setsA: $B: '2'C: '3'D: $=== TEST 6: simple integer expression grammar--- grammarexp   : exp addop term | termaddop : '+' | '-'term  : term mulop factor | factormulop : '*'factor: '(' exp ')' | /\d+/--- first_setsaddop: '+' '-'exp: '(' /\d+/factor: '(' /\d+/mulop: '*'term: '(' /\d+/--- follow_setsaddop: '(' /\d+/exp: $ ')' '+' '-'factor: $ ')' '*' '+' '-'mulop: '(' /\d+/term: $ ')' '*' '+' '-'=== TEST 7: grammar for if-statements--- grammarstatement : if_stmt | 'other'if_stmt   : 'if' '(' exp ')' statement else_partelse_part : 'else' statement | ''exp       : '0' | '1'--- first_setselse_part: '' 'else'exp: '0' '1'if_stmt: 'if'statement: 'if' 'other'--- follow_setselse_part: $ 'else'exp: ')'if_stmt: $ 'else'statement: $ 'else'=== TEST 8: grammar for statement sequences--- grammarstmt_sequence : stmt stmt_seqstmt_seq      : ';' stmt_sequence | ''stmt          : 's'--- first_setsstmt: 's'stmt_seq: '' ';'stmt_sequence: 's'--- follow_setsstmt: $ ';'stmt_seq: $stmt_sequence: $=== TEST 9: simple integer expression grammar w/o left recursion--- grammarexp: term exp_exp_: addop term exp_ | ''addop: '+' | '-'term: factor term_term_: mulop factor term_ | ''mulop: '*'factor: '(' exp ')' | /\d+/--- first_setsaddop: '+' '-'exp: '(' /\d+/exp_: '' '+' '-'factor: '(' /\d+/mulop: '*'term: '(' /\d+/term_: '' '*'--- follow_setsaddop: '(' /\d+/exp: $ ')'exp_: $ ')'factor: $ ')' '*' '+' '-'mulop: '(' /\d+/term: $ ')' '+' '-'term_: $ ')' '+' '-'

⌨️ 快捷键说明

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