-- This is the test program for Assignment 4. with TEXT_IO; use TEXT_IO; with a4types; use a4types; procedure a4test is g:grammar_ptr; d:dfa_ptr; begin -- This program contains functions to create a DFA, given -- a regular grammar, and to simulate the resulting -- DFA on a given input string. There are structs -- to represent DFAs and their rows, regular grammars, and -- grammar rules. This file contains the test program. -- Nonterminals are represented as pointers to strings, terminals -- as characters. -- The program assumes that the start symbol of a -- grammar must be called "S". -- the test program -- reg expr: l(l+n)* g:=make_grammar; add_rule(g,make_rule( make_nonterminal("S"), make_terminal('l'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("S"), make_terminal('l'))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('l'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('l'))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('n'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('n'))); d:=build_DFA(g); test_string_and_print(d,"l"); test_string_and_print(d,"ll"); test_string_and_print(d,"ln"); test_string_and_print(d,"lnnn"); test_string_and_print(d,"llnnn"); test_string_and_print(d,"lnnln"); test_string_and_print(d,"lxnnn"); test_string_and_print(d,"nnn"); test_string_and_print(d,"nlnl"); new_line; -- reg expr: ln* g:=make_grammar; add_rule(g,make_rule( make_nonterminal("S"), make_terminal('l'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("S"), make_terminal('l'))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('n'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('n'))); d:=build_DFA(g); test_string_and_print(d,"l"); test_string_and_print(d,"ln"); test_string_and_print(d,"lnnn"); test_string_and_print(d,"ll"); test_string_and_print(d,"nnn"); test_string_and_print(d,"llnnn"); test_string_and_print(d,"lnnln"); test_string_and_print(d,"lxnnn"); new_line; -- reg expr: in + out + in_out g:=make_grammar; add_rule(g,make_rule( make_nonterminal("S"), make_terminal('i'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("S"), make_terminal('o'), make_nonterminal("B"))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('n'), make_nonterminal("C"))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('n'))); add_rule(g,make_rule( make_nonterminal("C"), make_terminal('_'), make_nonterminal("D"))); add_rule(g,make_rule( make_nonterminal("D"), make_terminal('o'), make_nonterminal("B"))); add_rule(g,make_rule( make_nonterminal("B"), make_terminal('u'),make_nonterminal("E"))); add_rule(g,make_rule( make_nonterminal("E"), make_terminal('t'))); d:=build_DFA(g); test_string_and_print(d,"in"); test_string_and_print(d,"out"); test_string_and_print(d,"in_out"); test_string_and_print(d,"in_"); test_string_and_print(d,"out_in"); test_string_and_print(d,"i"); test_string_and_print(d,"on"); new_line; -- reg expr: dd* + dd*.d* g:=make_grammar; add_rule(g,make_rule( make_nonterminal("S"), make_terminal('d'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("S"), make_terminal('d'))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('d'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('d'))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('.'), make_nonterminal("B"))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('.'))); add_rule(g,make_rule( make_nonterminal("B"), make_terminal('d'), make_nonterminal("B"))); add_rule(g,make_rule( make_nonterminal("B"), make_terminal('d'))); d:=build_DFA(g); test_string_and_print(d,"d"); test_string_and_print(d,"dd"); test_string_and_print(d,"ddd"); test_string_and_print(d,"dddd"); test_string_and_print(d,"d.d"); test_string_and_print(d,"d.dd"); test_string_and_print(d,"dd."); test_string_and_print(d,".dd"); test_string_and_print(d,"d.d.d"); test_string_and_print(d,"dd..dd"); new_line; -- reg expr: -- [-](dd* + dd*.dd*[e[-]dd]) g:=make_grammar; add_rule(g,make_rule( make_nonterminal("S"), make_terminal('d'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("S"), make_terminal('d'))); add_rule(g,make_rule( make_nonterminal("S"), make_terminal('-'), make_nonterminal("B"))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('d'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('d'))); add_rule(g,make_rule( make_nonterminal("B"), make_terminal('d'), make_nonterminal("A"))); add_rule(g,make_rule( make_nonterminal("B"), make_terminal('d'))); add_rule(g,make_rule( make_nonterminal("A"), make_terminal('.'), make_nonterminal("C"))); add_rule(g,make_rule( make_nonterminal("B"), make_terminal('d'))); add_rule(g,make_rule( make_nonterminal("C"), make_terminal('d'), make_nonterminal("D"))); add_rule(g,make_rule( make_nonterminal("C"), make_terminal('d'))); add_rule(g,make_rule( make_nonterminal("D"), make_terminal('d'), make_nonterminal("D"))); add_rule(g,make_rule( make_nonterminal("D"), make_terminal('d'))); add_rule(g,make_rule( make_nonterminal("D"), make_terminal('e'), make_nonterminal("E"))); add_rule(g,make_rule( make_nonterminal("E"), make_terminal('-'), make_nonterminal("F"))); add_rule(g,make_rule( make_nonterminal("E"), make_terminal('d'), make_nonterminal("H"))); add_rule(g,make_rule( make_nonterminal("F"), make_terminal('d'), make_nonterminal("G"))); add_rule(g,make_rule( make_nonterminal("G"), make_terminal('d'))); add_rule(g,make_rule( make_nonterminal("H"), make_terminal('d'))); d:=build_DFA(g); test_string_and_print(d,"d"); test_string_and_print(d,"dd"); test_string_and_print(d,"ddd"); test_string_and_print(d,"dddd"); test_string_and_print(d,"-d"); test_string_and_print(d,"d.d"); test_string_and_print(d,"-d.d"); test_string_and_print(d,"d.dd"); test_string_and_print(d,"-d.dd"); test_string_and_print(d,"ddd.dd"); test_string_and_print(d,"dd.dedd"); test_string_and_print(d,"-ddd.dde-dd"); test_string_and_print(d,"dd."); test_string_and_print(d,".dd"); test_string_and_print(d,"-d."); test_string_and_print(d,"d-dd"); test_string_and_print(d,"d.d.d"); test_string_and_print(d,"ddedd"); test_string_and_print(d,"d.ded.d"); test_string_and_print(d,"dd.de-d"); test_string_and_print(d,"ddd.ddeddd"); test_string_and_print(d,"dd.ded.dedd"); end a4test;