01: package fri.patterns.interpreter.parsergenerator.examples;
02:
03: import fri.patterns.interpreter.parsergenerator.Token;
04: import fri.patterns.interpreter.parsergenerator.Lexer;
05: import fri.patterns.interpreter.parsergenerator.Parser;
06: import fri.patterns.interpreter.parsergenerator.ParserTables;
07: import fri.patterns.interpreter.parsergenerator.syntax.Syntax;
08: import fri.patterns.interpreter.parsergenerator.syntax.builder.SyntaxSeparation;
09: import fri.patterns.interpreter.parsergenerator.lexer.LexerBuilder;
10: import fri.patterns.interpreter.parsergenerator.parsertables.SLRParserTables;
11: import fri.patterns.interpreter.parsergenerator.semantics.PrintSemantic;
12:
13: /**
14: "Hello World" example. Checks if "Hello" is followed by "World", arbitrary whitespaces.
15: This example shows how to build parser and lexer from scratch.
16:
17: @author Fritz Ritzberger
18: */
19:
20: public class HelloWorldParser {
21: private static final String[][] syntax = {
22: { "Start", "\"Hello\"", "\"World\"" },
23: { Token.IGNORED, "`whitespaces`" }, };
24:
25: public static void main(String[] args) throws Exception {
26: SyntaxSeparation separation = new SyntaxSeparation(new Syntax(
27: syntax)); // separate lexer and parser syntax
28: LexerBuilder builder = new LexerBuilder(separation
29: .getLexerSyntax(), separation.getIgnoredSymbols()); // build a Lexer
30: Lexer lexer = builder.getLexer();
31: lexer.setInput("\tHello \r\n\tWorld\n"); // give the lexer some very complex input :-)
32: ParserTables parserTables = new SLRParserTables(separation
33: .getParserSyntax());
34: Parser parser = new Parser(parserTables);
35: parser.parse(lexer, new PrintSemantic()); // start parsing with a print-semantic
36: }
37:
38: }
|