1 package org.simantics.scl.compiler.parser.generator.table;
3 import java.io.DataOutputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.util.Arrays;
9 import org.simantics.scl.compiler.parser.generator.compression.CompressedParseTable;
10 import org.simantics.scl.compiler.parser.generator.compression.ErrorTable;
11 import org.simantics.scl.compiler.parser.generator.compression.GCCompress;
13 public class ParseTable {
14 public final int stateCount;
15 public final int[][] actionTable;
16 public final int[][] gotoTable;
17 public final int[] productionInfo;
18 public final int[] initialStates;
19 public final String[] stateDescriptions;
27 String[] stateDescriptions) {
28 this.stateCount = stateCount;
29 this.actionTable = actionTable;
30 this.gotoTable = gotoTable;
31 this.productionInfo = productionInfo;
32 this.initialStates = initialStates;
33 this.stateDescriptions = stateDescriptions;
37 public String toString() {
38 StringBuilder b = new StringBuilder();
39 b.append("productionInfo = ").append(Arrays.toString(productionInfo)).append('\n');
40 b.append("actions:\n");
41 for(int[] actions : actionTable) {
43 for(int i=0;i<actions.length;++i) {
51 for(int[] gotos : gotoTable) {
53 for(int i=0;i<gotos.length;++i) {
63 public CompressedParseTable compress() {
64 return new CompressedParseTable(
65 GCCompress.compress(actionTable),
66 ErrorTable.createErrorTable(actionTable),
67 GCCompress.compress(gotoTable),
73 public void writeTo(File file) throws IOException {
74 FileOutputStream stream = new FileOutputStream(file);
75 DataOutputStream output = new DataOutputStream(stream);
76 for(int[] row : actionTable)
79 for(int[] row : gotoTable)
82 for(int val : productionInfo)