KickJava   Java API By Example, From Geeks To Geeks.

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


1 package fri.patterns.interpreter.parsergenerator.examples;
2
3 import java.io.*;
4 import fri.util.TimeStopper;
5 import fri.patterns.interpreter.parsergenerator.builder.SerializedLexer;
6 import fri.patterns.interpreter.parsergenerator.lexer.*;
7 import fri.patterns.interpreter.parsergenerator.syntax.*;
8 import fri.patterns.interpreter.parsergenerator.syntax.builder.*;
9
10 /**
11     Example DTD parser. Shows how to import unresolved nonterminals from another syntax (XML).
12     
13     @author Fritz Ritzberger, 2003
14 */

15
16 public class DtdLexer
17 {
18     public static void main(String JavaDoc [] args)
19         throws Exception JavaDoc
20     {
21         if (args.length <= 0) {
22             System.err.println("SYNTAX: java "+DtdLexer.class.getName()+" file.dtd [file.dtd ...]");
23             System.err.println(" Example DTD Parser");
24             System.exit(1);
25         }
26
27         TimeStopper timer = new TimeStopper();
28
29         SerializedLexer builder = new SerializedLexer();
30         LexerImpl lexer;
31         
32         if ((lexer = (LexerImpl) builder.readLexer(null, "Dtd")) == null) { // try to get serialized lexer
33
// read the DTD syntax (fragment) from EBNF file
34
Syntax dtdSyntax = new SyntaxBuilder(new InputStreamReader(DtdLexer.class.getResourceAsStream("Dtd.syntax"))).getSyntax();
35             // read the XML syntax from EBNF file
36
Syntax xmlSyntax = new SyntaxBuilder(new InputStreamReader(DtdLexer.class.getResourceAsStream("Xml.syntax"))).getSyntax();
37             
38             // resolve DTD syntax from XML syntax (which contains most of DTD rules for processing embedded DTDs)
39
dtdSyntax.resolveFrom(xmlSyntax);
40             //System.err.println("DTD Syntax is:\n"+dtdSyntax);
41

42             // put the lexer to file cache for next call
43
SyntaxSeparation separation = new SyntaxSeparation(dtdSyntax);
44             lexer = (LexerImpl) builder.buildAndStoreLexer( // store the lexer for next call
45
separation.getLexerSyntax(),
46                     "Dtd",
47                     separation.getTokenSymbols(),
48                     separation.getIgnoredSymbols());
49         }
50
51         System.err.println("time to build DTD file parser was "+timer.getInterval());
52
53         for (int i = 0; i < args.length; i++) {
54             String JavaDoc parseFile = args[i];
55             FileReader parseInput = new FileReader(parseFile);
56             lexer.setInput(parseInput);
57             
58             System.err.println("======================== Parsing: "+parseFile+" ========================");
59             boolean ok = lexer.lex(new XmlLexer.PrintXmlLexerSemantic());
60             System.err.println("========================================================");
61             
62             System.err.println("Lexing took "+timer.getInterval()+" millis.");
63             System.err.println("Result was: "+ok);
64         }
65     }
66
67 }
68
Popular Tags