KickJava   Java API By Example, From Geeks To Geeks.

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


1 package fri.patterns.interpreter.parsergenerator.examples;
2
3 import java.util.List JavaDoc;
4 import java.util.Map JavaDoc;
5 import fri.patterns.interpreter.parsergenerator.Lexer;
6 import fri.patterns.interpreter.parsergenerator.Parser;
7 import fri.patterns.interpreter.parsergenerator.Token;
8 import fri.patterns.interpreter.parsergenerator.builder.SerializedLexer;
9 import fri.patterns.interpreter.parsergenerator.builder.SerializedParser;
10 import fri.patterns.interpreter.parsergenerator.lexer.LexerBuilder;
11 import fri.patterns.interpreter.parsergenerator.lexer.LexerException;
12 import fri.patterns.interpreter.parsergenerator.lexer.LexerImpl;
13 import fri.patterns.interpreter.parsergenerator.lexer.Strategy;
14 import fri.patterns.interpreter.parsergenerator.syntax.Syntax;
15 import fri.patterns.interpreter.parsergenerator.syntax.SyntaxException;
16
17 /**
18  * This sample shows how to set another Lexer implementation
19  * into the Parser-builder.
20  *
21  * @author Fritz Ritzberger
22  */

23 public class HowToOverrideLexerImpl {
24     public static void main(String JavaDoc args[])
25         throws Exception JavaDoc
26     {
27         // a Lexer derivate class that prints a message
28
class OverrideLexer extends LexerImpl
29         {
30             public OverrideLexer(List JavaDoc ignoredSymbols, Map JavaDoc charConsumers) {
31                 super(ignoredSymbols, charConsumers);
32             }
33             /** Could provide another lexing Strategy. */
34             public Strategy newStrategy() {
35                 return super.newStrategy();
36             }
37         };
38
39         // override the Parser builder to install the new Lexer implementation
40
SerializedParser builder = new SerializedParser() {
41             protected SerializedLexer newSerializedLexer() // override SerializedLexer factory method
42
throws Exception JavaDoc
43             {
44                 return new SerializedLexer() {
45                     protected LexerBuilder newLexerBuilder(Syntax syntax, List JavaDoc ignoredSymbols) // override LexerBuilder factory method
46
throws LexerException, SyntaxException
47                     {
48                         return new LexerBuilder(syntax, ignoredSymbols) {
49                             public Lexer getLexer() { // override Lexer factory method
50
return new OverrideLexer(ignoredSymbols, charConsumers);
51                             }
52                         };
53                     }
54                 };
55             }
56         };
57         
58         String JavaDoc [][] syntaxInput = {
59             { "Start", "\"Hello\"", "\"World\"" },
60             { Token.IGNORED, "`whitespaces`" },
61         };
62         
63         Parser parser = builder.get(syntaxInput);
64         boolean ok = parser.parse("Hello World");
65         System.err.println("Parsing was "+ok);
66     }
67
68 }
69
Popular Tags