示例#1
0
        static void Main(string[] args)
        {
            var grammar = new GrammarBuilder();

            grammar.DefineTerminal("tk_package", false, (int)TokenDefine.Token, "package");
            grammar.DefineTerminal("tk_public", (int)TokenDefine.Token, "public");
            grammar.DefineTerminal("tk_final", (int)TokenDefine.Token, "final");
            grammar.DefineTerminal("tk_class", (int)TokenDefine.Token, "class");
            grammar.DefineTerminal("tk_void", (int)TokenDefine.Token, "void");
            grammar.DefineTerminal("tk_static", (int)TokenDefine.Token, "static");

            grammar.DefineTerminal("tk_semicolon", false, (int)TokenDefine.Semicolon);
            grammar.DefineTerminal("tk_dot", false, (int)TokenDefine.Dot);
            grammar.DefineTerminal("tk_open_brace", false, (int)TokenDefine.OpenBrace);
            grammar.DefineTerminal("tk_close_brace", false, (int)TokenDefine.CloseBrace);

            grammar.DefineTerminal("identifier", (int)TokenDefine.Token, "[a-zA-Z]+[a-zA-Z0-9]*");

            grammar.DefineRoot("class_definition");
            grammar.DefineRoot("package_sentences", "class_definition");

            grammar.ParseNonTerminal("package_sentences", true, "package_sentence*");
            grammar.ParseNonTerminal("package_sentence", true, "tk_package identifier(tk_dot identifier)* tk_semicolon");

            grammar.DefineNonTerminal("class_modifiers", true, "tk_public", "tk_final");
            grammar.DefineNonTerminal("class_definition", "class_modifiers", "tk_class", "identifier", "tk_open_brace", "functions", "tk_close_brace");

            grammar.ParseNonTerminal("functions", true, "function_definition*");
            grammar.DefineNonTerminal("function_definition", "tk_public", "tk_static", "tk_void", "identifier", "tk_open_brace", "tk_close_brace");

            var parser = grammar.Build();
            var parse  = new MyParser();
            var tokens = parse.ParseFile(@"G:\workspace\SimpleParser\test.java");

            parser.Parse(tokens, new ASTVisitor());
        }