01: package fri.patterns.interpreter.parsergenerator.examples;
02:
03: import java.util.List;
04: import java.util.Map;
05: import fri.patterns.interpreter.parsergenerator.Lexer;
06: import fri.patterns.interpreter.parsergenerator.Parser;
07: import fri.patterns.interpreter.parsergenerator.Token;
08: import fri.patterns.interpreter.parsergenerator.builder.SerializedLexer;
09: 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 args[]) throws Exception {
25: // a Lexer derivate class that prints a message
26: class OverrideLexer extends LexerImpl {
27: public OverrideLexer(List ignoredSymbols, Map charConsumers) {
28: super (ignoredSymbols, charConsumers);
29: }
30:
31: /** Could provide another lexing Strategy. */
32: public Strategy newStrategy() {
33: return super .newStrategy();
34: }
35: }
36: ;
37:
38: // override the Parser builder to install the new Lexer implementation
39: SerializedParser builder = new SerializedParser() {
40: protected SerializedLexer newSerializedLexer() // override SerializedLexer factory method
41: throws Exception {
42: return new SerializedLexer() {
43: protected LexerBuilder newLexerBuilder(
44: Syntax syntax, List ignoredSymbols) // override LexerBuilder factory method
45: throws LexerException, SyntaxException {
46: return new LexerBuilder(syntax, ignoredSymbols) {
47: public Lexer getLexer() { // override Lexer factory method
48: return new OverrideLexer(
49: ignoredSymbols, charConsumers);
50: }
51: };
52: }
53: };
54: }
55: };
56:
57: String[][] syntaxInput = {
58: { "Start", "\"Hello\"", "\"World\"" },
59: { Token.IGNORED, "`whitespaces`" }, };
60:
61: Parser parser = builder.get(syntaxInput);
62: boolean ok = parser.parse("Hello World");
63: System.err.println("Parsing was " + ok);
64: }
65:
66: }
|