| 1 package fri.patterns.interpreter.parsergenerator.builder; 2 3 import java.io.File ; 4 import fri.patterns.interpreter.parsergenerator.ParserTables; 5 import fri.patterns.interpreter.parsergenerator.parsertables.*; 6 import fri.patterns.interpreter.parsergenerator.syntax.Syntax; 7 8 31 32 public class SerializedTables extends SerializedObject 33 { 34 private boolean PRODUCTION; 36 37 public SerializedTables() { 38 this(true); 39 } 40 41 42 public SerializedTables(boolean production) { 43 this.PRODUCTION = production; 44 } 45 46 52 public AbstractParserTables get(Object syntaxInput) 53 throws Exception  54 { 55 return get(syntaxInput, null); 56 } 57 58 65 public AbstractParserTables get(Object syntaxInput, String baseName) 66 throws Exception  67 { 68 return get(null, syntaxInput, baseName); 69 } 70 71 78 public AbstractParserTables get(Class parserType, Object syntaxInput, String baseName) 79 throws Exception  80 { 81 AbstractParserTables parserTables = readParserTables(syntaxInput, baseName); 82 if (parserTables == null) 83 parserTables = buildAndStoreParserTables(parserType, null, syntaxInput, baseName); 84 return parserTables; 85 } 86 87 private String ensureFileName(Object syntaxInput, String baseName) { 88 if (baseName == null) 89 baseName = baseNameFromSyntax(syntaxInput); 90 return baseName+"ParserTables.ser"; 91 } 92 93 public AbstractParserTables readParserTables(Object syntaxInput, String baseName) { 94 if (PRODUCTION) 95 return (AbstractParserTables) read(ensureFileName(syntaxInput, baseName)); 96 return null; 97 } 98 99 public AbstractParserTables buildAndStoreParserTables(Class parserType, Syntax parserSyntax, Object syntaxInput, String baseName) 100 throws Exception  101 { 102 if (parserType == null) 103 parserType = LALRParserTables.class; 104 105 Syntax syntax = parserSyntax == null ? toSyntax(syntaxInput) : parserSyntax; 106 107 fri.util.TimeStopper ts = new fri.util.TimeStopper(); 108 AbstractParserTables parserTables = AbstractParserTables.construct(parserType, syntax); 109 System.err.println("ParserTables scratch construction took "+ts.getTimeMillis()+" millis"); 110 111 if (PRODUCTION) 112 write(ensureFileName(syntaxInput, baseName), parserTables); 113 114 return parserTables; 115 } 116 117 118 119 120 public static void main(String [] args) { 121 try { 122 File syntaxFile = new File ("fri/patterns/interpreter/parsergenerator/syntax/builder/examples/SyntaxBuilder.syntax"); 123 Syntax syntax = new fri.patterns.interpreter.parsergenerator.syntax.builder.SyntaxBuilder(syntaxFile).getParserSyntax(); 124 fri.util.TimeStopper ts = new fri.util.TimeStopper(); 125 ParserTables parserTables = new SerializedTables().get(syntax, "SyntaxBuilder"); 126 System.err.println("ParserTables were built in "+ts.getTimeMillis()+" millis"); 127 } 128 catch (Exception e) { 129 e.printStackTrace(); 130 } 131 } 132 133 } 134 | Popular Tags |