fri.patterns.interpreter.parsergenerator.builder
Class SerializedParser

java.lang.Object
  |
  +--fri.patterns.interpreter.parsergenerator.builder.SerializedObject
        |
        +--fri.patterns.interpreter.parsergenerator.builder.SerializedParser

public class SerializedParser
extends fri.patterns.interpreter.parsergenerator.builder.SerializedObject

This class is definitely the shortest way to construct a Parser (with Lexer) for a Syntax. It uses all serialization utils in this package to quickly build a parsing environment. This factory accepts a syntax where parser and lexer rules were mixed.

Example (syntax input from a file):

        File ebnfFile = new File("MySyntax.syntax");
        Parser parser = new SerializedParser().get(ebnfFile);
        
or (syntax input from a Reader, must pass a filename):
        Reader ebnfReader = new InputStreamReader(MySyntaxSemantic.class.getResourceAsStream("MySyntax.syntax"));
        Parser parser = new SerializedParser().get(ebnfReader, "MySyntax");
        

Author:
(c) 2002, Fritz Ritzberger

Field Summary
static java.lang.String PARSERFILE_SUFFIX
          The suffix for serialized Parser files.
protected  boolean PRODUCTION
           
 
Constructor Summary
SerializedParser()
          Create a Parser factory that caches built Lexers.
SerializedParser(boolean production)
          Create a Parser factory that caches built Lexers.
 
Method Summary
static java.lang.String baseNameFromSyntax(java.lang.Object syntaxInput)
          When syntaxInput is a File, the name of the serialization file is created from its basename (without any extension), else "Unknown" is assumed as basename.
protected  java.lang.String ensureDirectory(java.lang.String fileName)
          Creates the directory of passed filename if it does not exist.
 Parser get(java.lang.Class parserType, java.lang.Object syntaxInput)
          Builds the Parser from scratch if not found its parts in filesystem, else loads all serialized parts.
 Parser get(java.lang.Class parserType, java.lang.Object syntaxInput, java.lang.String baseName)
          Builds the parsing environment from scratch if not found its parts in filesystem, else loads all serialized parts.
 Parser get(java.lang.Object syntaxInput)
          Builds the Parser from scratch if not found its parts in filesystem, else loads all serialized parts.
 Parser get(java.lang.Object syntaxInput, java.lang.String baseName)
          Builds the Parser from scratch if not found its parts in filesystem, else loads all serialized parts.
static void main(java.lang.String[] args)
          Test main.
protected  java.lang.String makeFilePath(java.lang.String fileName)
          Puts the file into ".friware/parsers" directory in "user.home".
protected  SerializedLexer newSerializedLexer()
          To be overridden when a modified SerializedLexer is needed.
protected  java.lang.Object read(java.lang.String fileName)
          Deserializes an object from filesystem.
static Syntax toSyntax(java.lang.Object syntaxInput)
          Converts a File, InputStream, Reader, String, StringBuffer, List of Lists or String[][] to a Syntax.
protected  boolean write(java.lang.String fileName, java.lang.Object o)
          Serializes an object to filesystem.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PARSERFILE_SUFFIX

public static final java.lang.String PARSERFILE_SUFFIX
The suffix for serialized Parser files.

See Also:
Constant Field Values

PRODUCTION

protected boolean PRODUCTION
Constructor Detail

SerializedParser

public SerializedParser()
Create a Parser factory that caches built Lexers.


SerializedParser

public SerializedParser(boolean production)
Create a Parser factory that caches built Lexers. @param production when false the Parser will not be serialized.

Method Detail

get

public Parser get(java.lang.Object syntaxInput)
           throws java.lang.Exception
Builds the Parser from scratch if not found its parts in filesystem, else loads all serialized parts.

Parameters:
syntaxInput - the mixed lexer/parser syntax as File, InputStream, List of Lists, String [][] or Syntax.
Returns:
Parser, built from scratch or loaded from filesystem.
java.lang.Exception

get

public Parser get(java.lang.Object syntaxInput,
                  java.lang.String baseName)
           throws java.lang.Exception
Builds the Parser from scratch if not found its parts in filesystem, else loads all serialized parts.

Parameters:
syntaxInput - the mixed lexer/parser syntax as File, InputStream, List of Lists, String [][] or Syntax.
baseName - basename for serialization, can be null
Returns:
Parser, built from scratch or loaded from filesystem.
java.lang.Exception

get

public Parser get(java.lang.Class parserType,
                  java.lang.Object syntaxInput)
           throws java.lang.Exception
Builds the Parser from scratch if not found its parts in filesystem, else loads all serialized parts.

Parameters:
parserType - the class of ParserTables to create for the syntax (LALRParserTables.class is default).
syntaxInput - the mixed lexer/parser syntax as File, InputStream, List of Lists, String [][] or Syntax.
Returns:
Parser, built from scratch or loaded from filesystem.
java.lang.Exception

get

public Parser get(java.lang.Class parserType,
                  java.lang.Object syntaxInput,
                  java.lang.String baseName)
           throws java.lang.Exception
Builds the parsing environment from scratch if not found its parts in filesystem, else loads all serialized parts.

Parameters:
parserType - the class of ParserTables to create for the syntax (LALRParserTables.class is default).
syntaxInput - the mixed lexer/parser syntax as File, InputStream, List of Lists, String [][] or Syntax.
baseName - basename for serialization, can be null
Returns:
Parser, built from scratch or loaded from filesystem.
java.lang.Exception

newSerializedLexer

protected SerializedLexer newSerializedLexer()
                                      throws java.lang.Exception
To be overridden when a modified SerializedLexer is needed.

java.lang.Exception

main

public static void main(java.lang.String[] args)
Test main. Building serialized Java Parser takes 740, building from scratch takes 4000 millis.


read

protected java.lang.Object read(java.lang.String fileName)
Deserializes an object from filesystem.

Returns:
deserialized object.

write

protected boolean write(java.lang.String fileName,
                        java.lang.Object o)
Serializes an object to filesystem.

Returns:
true on success.

baseNameFromSyntax

public static java.lang.String baseNameFromSyntax(java.lang.Object syntaxInput)
When syntaxInput is a File, the name of the serialization file is created from its basename (without any extension), else "Unknown" is assumed as basename. The returned name has no path.


toSyntax

public static Syntax toSyntax(java.lang.Object syntaxInput)
                       throws java.lang.Exception
Converts a File, InputStream, Reader, String, StringBuffer, List of Lists or String[][] to a Syntax.

java.lang.Exception

makeFilePath

protected java.lang.String makeFilePath(java.lang.String fileName)
Puts the file into ".friware/parsers" directory in "user.home".


ensureDirectory

protected java.lang.String ensureDirectory(java.lang.String fileName)
Creates the directory of passed filename if it does not exist. @return the directory name.