PreviousUpNext

15.4.144  src/app/yacc/src/link.pkg

#  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;


Comments and suggestions to: bugs@mythryl.org

PreviousUpNext