KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fri > patterns > interpreter > parsergenerator > examples > JavaParser


1 package fri.patterns.interpreter.parsergenerator.examples;
2
3 import java.io.*;
4 import fri.util.TimeStopper;
5 import fri.patterns.interpreter.parsergenerator.*;
6 import fri.patterns.interpreter.parsergenerator.builder.*;
7 import fri.patterns.interpreter.parsergenerator.semantics.PrintSemantic;
8 //import fri.patterns.interpreter.parsergenerator.syntax.builder.*;
9
//import fri.patterns.interpreter.parsergenerator.parsertables.*;
10

11 /**
12     Example Java parser.
13     
14     @author Fritz Ritzberger, 2000
15 */

16
17 public class JavaParser
18 {
19     public static void main(String JavaDoc [] args)
20         throws Exception JavaDoc
21     {
22         if (args.length <= 0) {
23             System.err.println("SYNTAX: java "+JavaParser.class.getName()+" file.java [file.java ...]");
24             System.err.println(" Example Java Parser");
25         }
26         else {
27             TimeStopper timer = new TimeStopper();
28
29             // read the syntax from EBNF file
30
Reader syntaxInput = new InputStreamReader(JavaParser.class.getResourceAsStream("Java.syntax"));
31             
32             /* building from scratch, takes 4200 millis
33             SyntaxBuilder builder = new SyntaxBuilder(syntaxInput);
34             Lexer lexer = builder.getLexer();
35             lexer.setDebug(true);
36             ParserTables tables = new LALRParserTables(builder.getParserSyntax());
37             Parser parser = new Parser(tables);
38             parser.setLexer(lexer);
39             */

40             
41             /* building with precompiled tables, takes 1600 millis
42             SyntaxBuilder builder = new SyntaxBuilder(syntaxInput);
43             Lexer lexer = builder.getLexer();
44             ParserTables tables = new CompiledTables().get(builder.getParserSyntax(), "Java");
45             Parser parser = new Parser(tables);
46             parser.setLexer(lexer);
47             */

48             
49             /* building serialized parser, takes 740 millis */
50             Parser parser = new SerializedParser().get(null, syntaxInput, "Java");
51             System.err.println("time to build Java file parser was "+timer.getInterval());
52
53             //parser.getParserTables().dumpSyntaxNodes(System.out);
54
//parser.getParserTables().dump(System.err);
55

56             // we want to receive Java comments and spaces/newlines
57
parser.getLexer().addTokenListener(new Lexer.TokenListener() {
58                 public void tokenReceived(Token token, boolean ignored) {
59                     if (ignored) {
60                         System.err.println("------------- Ignored Token Received -------------------");
61                         System.err.println(token.text);
62                         System.err.println("--------------------------------------------------------");
63                     }
64                 }
65             });
66
67             for (int i = 0; i < args.length; i++) {
68                 String JavaDoc fileToParse = args[i];
69                 FileReader parseInput = new FileReader(fileToParse);
70                 System.err.println("========================================================");
71                 System.err.println("Parsing: "+fileToParse);
72
73                 parser.setInput(parseInput); // set file input to lexer
74
boolean ok = parser.parse(new PrintSemantic()); // parse input
75

76                 System.err.println("========================================================");
77                 System.err.println("Parsing result from "+fileToParse+" is: "+ok+", parsing took "+timer.getInterval()+" millis");
78             }
79         }
80     }
81     
82 }
83
Popular Tags