# Mythryl-Yacc Parser Generator (c) 1989 Andrew W. Appel, David R. Tarditi
# Compiled by:
#
src/app/yacc/src/mythryl-yacc.lib### "Speak the truth, but leave immediately after."
###
### -- Slovenian proverb
stipulate
# Create parser
package lr_vals
=
mlyacc_lr_vals_g (
package {
package token= lr_parser::token; # lr_parser is from
src/app/yacc/lib/parser2.pkg package header = header;
}
);
package lex
=
lex_mlyacc_g (
package {
package tokens = lr_vals::tokens;
package header = header;
}
);
package parser
=
make_complete_yacc_parser_with_custom_argument_g (
package {
package lex = lex;
package parser_data = lr_vals::parser_data;
package lr_parser = lr_parser;
}
);
package parse_gen_parser
=
parse_gen_parser_g (
package {
package parser = parser;
package header = header;
}
);
# Create package for computing LALR table from a grammar
package make_lr_table
=
make_lr_table_g (
package {
package internal_grammar = internal_grammar;
package lr_table = lr_table;
}
);
# Create packages for printing LALR tables:
# 'verbose' prints a verbose description of an lalr table
# print_package prints an ML package representing that is an lalr table
package verbose
=
verbose_g (
package { package errs = make_lr_table::errs; }
);
package print_package
=
print_package_g (
package {
package lr_table = make_lr_table::lr_table;
package shrink_lr_table
=
shrink_lr_table_g (
package { package lr_table=lr_table; }
);
}
);
herein
# Return function which takes a file name, invokes the parser on the file,
# does semantic checks, creates table, and prints it:
package parse_fn
=
parser_generator_g ( # parser_generator_g is from
src/app/yacc/src/yacc.pkg #
package {
package parse_gen_parser = parse_gen_parser;
package make_table = make_lr_table;
package verbose = verbose;
package print_package = print_package;
package deep_syntax = deep_syntax;
}
);
end;