Merge lp:~danilovesky/workcraft/trunk-verilog-export-translate into lp:workcraft

Proposed by Danil Sokolov
Status: Merged
Merged at revision: 667
Proposed branch: lp:~danilovesky/workcraft/trunk-verilog-export-translate
Merge into: lp:workcraft
Diff against target: 3388 lines (+1990/-643)
18 files modified
CircuitPlugin/src/org/workcraft/plugins/circuit/CircuitSettings.java (+23/-0)
CircuitPlugin/src/org/workcraft/plugins/circuit/CircuitUtils.java (+6/-6)
CircuitPlugin/src/org/workcraft/plugins/circuit/interop/GenlibImporter.java (+8/-2)
CircuitPlugin/src/org/workcraft/plugins/circuit/interop/VerilogImporter.java (+24/-6)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/ExpressionParser.java (+191/-121)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/ExpressionParser.jj (+2/-1)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/GenlibParser.java (+266/-171)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/GenlibParser.jj (+3/-1)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParser.java (+315/-0)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParser.jj (+100/-0)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParserConstants.java (+35/-0)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParserTokenManager.java (+399/-0)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/VerilogParser.java (+482/-327)
CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/VerilogParser.jj (+1/-1)
CircuitPlugin/src/org/workcraft/plugins/circuit/serialisation/VerilogSerialiser.java (+93/-4)
CircuitPlugin/src/org/workcraft/plugins/circuit/stg/CircuitToStgConverter.java (+3/-3)
CircuitPlugin/src/org/workcraft/plugins/circuit/verilog/SubstitutionRule.java (+16/-0)
WorkcraftCore/src/org/workcraft/plugins/shared/CommonDebugSettings.java (+23/-0)
To merge this branch: bzr merge lp:~danilovesky/workcraft/trunk-verilog-export-translate
Reviewer Review Type Date Requested Status
Danil Sokolov Pending
Review via email: mp+276965@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/CircuitSettings.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/CircuitSettings.java 2015-10-29 18:40:12 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/CircuitSettings.java 2015-11-09 09:38:45 +0000
@@ -21,6 +21,7 @@
21 private static final String keyWireWidth = prefix + ".wireWidth";21 private static final String keyWireWidth = prefix + ".wireWidth";
22 private static final String keySimplifyStg = prefix + ".simplifyStg";22 private static final String keySimplifyStg = prefix + ".simplifyStg";
23 private static final String keyGateLibrary = prefix + ".gateLibrary";23 private static final String keyGateLibrary = prefix + ".gateLibrary";
24 private static final String keySubstitutionLibrary = prefix + ".substitutionLibrary";
24 private static final String keyOpenSynthesisResult = prefix + ".openSynthesisResult";25 private static final String keyOpenSynthesisResult = prefix + ".openSynthesisResult";
2526
26 private static final boolean defaultShowContacts = false;27 private static final boolean defaultShowContacts = false;
@@ -30,6 +31,7 @@
30 private static final Double defaultWireWidth = 0.04;31 private static final Double defaultWireWidth = 0.04;
31 private static final boolean defaultSimplifyStg = true;32 private static final boolean defaultSimplifyStg = true;
32 private static final String defaultGateLibrary = "tools/petrify/petrify.lib";33 private static final String defaultGateLibrary = "tools/petrify/petrify.lib";
34 private static final String defaultSubstitutionLibrary = "";
33 private static final boolean defaultOpenSynthesisResult = true;35 private static final boolean defaultOpenSynthesisResult = true;
3436
35 private static boolean showContacts = defaultShowContacts;37 private static boolean showContacts = defaultShowContacts;
@@ -39,6 +41,7 @@
39 private static Double wireWidth = defaultWireWidth;41 private static Double wireWidth = defaultWireWidth;
40 private static boolean simplifyStg = defaultSimplifyStg;42 private static boolean simplifyStg = defaultSimplifyStg;
41 private static String gateLibrary = defaultGateLibrary;43 private static String gateLibrary = defaultGateLibrary;
44 private static String substitutionLibrary = defaultSubstitutionLibrary;
42 private static boolean openSynthesisResult = defaultOpenSynthesisResult;45 private static boolean openSynthesisResult = defaultOpenSynthesisResult;
43 46
44 public CircuitSettings() {47 public CircuitSettings() {
@@ -112,6 +115,16 @@
112 }115 }
113 });116 });
114117
118 properties.add(new PropertyDeclaration<CircuitSettings, String>(
119 this, "Substitution rules for export", String.class, true, false, false) {
120 protected void setter(CircuitSettings object, String value) {
121 setSubstitutionLibrary(value);
122 }
123 protected String getter(CircuitSettings object) {
124 return getSubstitutionLibrary();
125 }
126 });
127
115 properties.add(new PropertyDeclaration<CircuitSettings, Boolean>(128 properties.add(new PropertyDeclaration<CircuitSettings, Boolean>(
116 this, "Import synthesis result", Boolean.class, true, false, false) {129 this, "Import synthesis result", Boolean.class, true, false, false) {
117 protected void setter(CircuitSettings object, Boolean value) {130 protected void setter(CircuitSettings object, Boolean value) {
@@ -147,6 +160,7 @@
147 setWireWidth(config.getDouble(keyWireWidth, defaultWireWidth));160 setWireWidth(config.getDouble(keyWireWidth, defaultWireWidth));
148 setSimplifyStg(config.getBoolean(keySimplifyStg, defaultSimplifyStg));161 setSimplifyStg(config.getBoolean(keySimplifyStg, defaultSimplifyStg));
149 setGateLibrary(config.getString(keyGateLibrary, defaultGateLibrary));162 setGateLibrary(config.getString(keyGateLibrary, defaultGateLibrary));
163 setSubstitutionLibrary(config.getString(keySubstitutionLibrary, defaultSubstitutionLibrary));
150 setOpenSynthesisResult(config.getBoolean(keyOpenSynthesisResult, defaultOpenSynthesisResult));164 setOpenSynthesisResult(config.getBoolean(keyOpenSynthesisResult, defaultOpenSynthesisResult));
151 }165 }
152166
@@ -159,6 +173,7 @@
159 config.setDouble(keyWireWidth, getWireWidth());173 config.setDouble(keyWireWidth, getWireWidth());
160 config.setBoolean(keySimplifyStg, getSimplifyStg());174 config.setBoolean(keySimplifyStg, getSimplifyStg());
161 config.set(keyGateLibrary, getGateLibrary());175 config.set(keyGateLibrary, getGateLibrary());
176 config.set(keySubstitutionLibrary, getSubstitutionLibrary());
162 config.setBoolean(keyOpenSynthesisResult, getOpenSynthesisResult());177 config.setBoolean(keyOpenSynthesisResult, getOpenSynthesisResult());
163 }178 }
164 179
@@ -217,6 +232,14 @@
217 public static void setGateLibrary(String value) {232 public static void setGateLibrary(String value) {
218 gateLibrary = value;233 gateLibrary = value;
219 }234 }
235
236 public static String getSubstitutionLibrary() {
237 return substitutionLibrary;
238 }
239
240 public static void setSubstitutionLibrary(String value) {
241 substitutionLibrary = value;
242 }
220 243
221 public static boolean getOpenSynthesisResult() {244 public static boolean getOpenSynthesisResult() {
222 return openSynthesisResult;245 return openSynthesisResult;
223246
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/CircuitUtils.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/CircuitUtils.java 2015-10-30 19:09:08 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/CircuitUtils.java 2015-11-09 09:38:45 +0000
@@ -139,14 +139,14 @@
139 return zeroDelayOutput;139 return zeroDelayOutput;
140 }140 }
141141
142 public static Contact findSignal(Circuit circuit, Contact contact) {142 public static Contact findSignal(Circuit circuit, Contact contact, boolean transparentZeroDelayComponents) {
143 Contact result = contact;143 Contact result = contact;
144 Contact driver = findDriver(circuit, contact, true);144 Contact driver = findDriver(circuit, contact, transparentZeroDelayComponents);
145 if (driver != null) {145 if (driver != null) {
146 result = driver;146 result = driver;
147 for (Contact signal : Hierarchy.getDescendantsOfType(circuit.getRoot(), Contact.class)) {147 for (Contact signal : Hierarchy.getDescendantsOfType(circuit.getRoot(), Contact.class)) {
148 if (signal.isPort() && signal.isOutput()) {148 if (signal.isPort() && signal.isOutput()) {
149 if (driver == CircuitUtils.findDriver(circuit, signal, true)) {149 if (driver == CircuitUtils.findDriver(circuit, signal, transparentZeroDelayComponents)) {
150 result = signal;150 result = signal;
151 break;151 break;
152 }152 }
@@ -156,15 +156,15 @@
156 return result;156 return result;
157 }157 }
158158
159 public static VisualContact findSignal(VisualCircuit circuit, VisualContact contact) {159 public static VisualContact findSignal(VisualCircuit circuit, VisualContact contact, boolean transparentZeroDelayComponents) {
160 Contact mathSignal = findSignal((Circuit)circuit.getMathModel(), contact.getReferencedContact());160 Contact mathSignal = findSignal((Circuit)circuit.getMathModel(), contact.getReferencedContact(), transparentZeroDelayComponents);
161 return circuit.getVisualComponent(mathSignal, VisualContact.class);161 return circuit.getVisualComponent(mathSignal, VisualContact.class);
162 }162 }
163163
164 public static String getWireName(Circuit circuit, Contact contact) {164 public static String getWireName(Circuit circuit, Contact contact) {
165 String result = null;165 String result = null;
166 if (!circuit.getPreset(contact).isEmpty() || !circuit.getPostset(contact).isEmpty()) {166 if (!circuit.getPreset(contact).isEmpty() || !circuit.getPostset(contact).isEmpty()) {
167 Contact signal = findSignal(circuit, contact);167 Contact signal = findSignal(circuit, contact, false);
168 result = getContactName(circuit, signal);168 result = getContactName(circuit, signal);
169 }169 }
170 return result;170 return result;
171171
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/interop/GenlibImporter.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/interop/GenlibImporter.java 2015-07-30 15:45:39 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/interop/GenlibImporter.java 2015-11-09 09:38:45 +0000
@@ -33,6 +33,7 @@
33import org.workcraft.plugins.circuit.genlib.Library;33import org.workcraft.plugins.circuit.genlib.Library;
34import org.workcraft.plugins.circuit.javacc.GenlibParser;34import org.workcraft.plugins.circuit.javacc.GenlibParser;
35import org.workcraft.plugins.circuit.javacc.ParseException;35import org.workcraft.plugins.circuit.javacc.ParseException;
36import org.workcraft.plugins.shared.CommonDebugSettings;
36import org.workcraft.workspace.ModelEntry;37import org.workcraft.workspace.ModelEntry;
3738
38public class GenlibImporter implements Importer {39public class GenlibImporter implements Importer {
@@ -54,9 +55,14 @@
54 55
55 public Circuit importGenlib(InputStream in) throws DeserialisationException {56 public Circuit importGenlib(InputStream in) throws DeserialisationException {
56 final Circuit circuit = new Circuit();57 final Circuit circuit = new Circuit();
57 GenlibParser parser = new GenlibParser(in);58 GenlibParser genlibParser = new GenlibParser(in);
59 if (CommonDebugSettings.getParserTracing()) {
60 genlibParser.enable_tracing();
61 } else {
62 genlibParser.disable_tracing();
63 }
58 try {64 try {
59 Library library = parser.parseGenlib();65 Library library = genlibParser.parseGenlib();
60 for (final String name: library.getNames()) {66 for (final String name: library.getNames()) {
61 final Gate gate = library.get(name);67 final Gate gate = library.get(name);
62 GenlibUtils.instantiateGate(gate, null, circuit);68 GenlibUtils.instantiateGate(gate, null, circuit);
6369
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/interop/VerilogImporter.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/interop/VerilogImporter.java 2015-11-02 12:32:29 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/interop/VerilogImporter.java 2015-11-09 09:38:45 +0000
@@ -128,8 +128,13 @@
128 128
129 public Circuit importCircuit(InputStream in) throws DeserialisationException {129 public Circuit importCircuit(InputStream in) throws DeserialisationException {
130 try {130 try {
131 VerilogParser parser = new VerilogParser(in);131 VerilogParser verilogParser = new VerilogParser(in);
132 HashMap<String, Module> modules = getModuleMap(parser.parseCircuit());132 if (CommonDebugSettings.getParserTracing()) {
133 verilogParser.enable_tracing();
134 } else {
135 verilogParser.disable_tracing();
136 }
137 HashMap<String, Module> modules = getModuleMap(verilogParser.parseCircuit());
133 HashSet<Module> topModules = getTopModule(modules);138 HashSet<Module> topModules = getTopModule(modules);
134 if (topModules.size() == 0) {139 if (topModules.size() == 0) {
135 throw new RuntimeException("No top module found.");140 throw new RuntimeException("No top module found.");
@@ -214,6 +219,7 @@
214 219
215 private Circuit createCircuit(Module topModule, HashMap<String, Module> modules) {220 private Circuit createCircuit(Module topModule, HashMap<String, Module> modules) {
216 Circuit circuit = new Circuit();221 Circuit circuit = new Circuit();
222 circuit.setTitle(topModule.name);
217 HashMap<Instance, FunctionComponent> instanceComponentMap = new HashMap<>();223 HashMap<Instance, FunctionComponent> instanceComponentMap = new HashMap<>();
218 HashMap<String, Wire> wires = createPorts(circuit, topModule);224 HashMap<String, Wire> wires = createPorts(circuit, topModule);
219 for (Assign assign: topModule.assigns) {225 for (Assign assign: topModule.assigns) {
@@ -363,10 +369,15 @@
363369
364 private Expression convertStringToExpression(String formula) {370 private Expression convertStringToExpression(String formula) {
365 InputStream expressionStream = new ByteArrayInputStream(formula.getBytes());371 InputStream expressionStream = new ByteArrayInputStream(formula.getBytes());
366 ExpressionParser parser = new ExpressionParser(expressionStream);372 ExpressionParser expressionParser = new ExpressionParser(expressionStream);
373 if (CommonDebugSettings.getParserTracing()) {
374 expressionParser.enable_tracing();
375 } else {
376 expressionParser.disable_tracing();
377 }
367 Expression expression = null;378 Expression expression = null;
368 try {379 try {
369 expression = parser.parseExpression();380 expression = expressionParser.parseExpression();
370 } catch (ParseException e1) {381 } catch (ParseException e1) {
371 System.out.println("Warning: could not parse assign expression '" + formula + "'.");382 System.out.println("Warning: could not parse assign expression '" + formula + "'.");
372 }383 }
@@ -383,8 +394,15 @@
383 final Framework framework = Framework.getInstance();394 final Framework framework = Framework.getInstance();
384 if (framework.checkFile(libraryFile, "Gate library access error")) {395 if (framework.checkFile(libraryFile, "Gate library access error")) {
385 try {396 try {
386 InputStream genlibInputStream = new FileInputStream(CircuitSettings.getGateLibrary());397 InputStream genlibInputStream = new FileInputStream(libraryFileName);
387 library = new GenlibParser(genlibInputStream).parseGenlib();398 GenlibParser genlibParser = new GenlibParser(genlibInputStream);
399 if (CommonDebugSettings.getParserTracing()) {
400 genlibParser.enable_tracing();
401 } else {
402 genlibParser.disable_tracing();
403 }
404 library = genlibParser.parseGenlib();
405 System.out.println("Info: mapping the imported Verilog into the gate library '" + libraryFileName + "'.");
388 } catch (FileNotFoundException e) {406 } catch (FileNotFoundException e) {
389 } catch (ParseException e) {407 } catch (ParseException e) {
390 System.out.println("Warning: could not parse the gate library '" + libraryFileName + "'.");408 System.out.println("Warning: could not parse the gate library '" + libraryFileName + "'.");
391409
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/ExpressionParser.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/ExpressionParser.java 2015-10-22 16:04:43 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/ExpressionParser.java 2015-11-09 09:38:45 +0000
@@ -24,172 +24,197 @@
24public class ExpressionParser implements ExpressionParserConstants {24public class ExpressionParser implements ExpressionParserConstants {
2525
26 final public Expression parseExpression() throws ParseException {26 final public Expression parseExpression() throws ParseException {
27 trace_call("parseExpression");
28 try {
27 Expression term;29 Expression term;
28 List<Expression> terms = new LinkedList<Expression>();30 List<Expression> terms = new LinkedList<Expression>();
29 term = parseTerm();31 term = parseTerm();
30 terms.add(term);32 terms.add(term);
31 label_1:33 label_1:
32 while (true) {34 while (true) {
33 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {35 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
34 case 9:36 case 9:
35 case 10:37 case 10:
36 case 11:38 case 11:
37 ;39 ;
38 break;40 break;
39 default:41 default:
40 jj_la1[0] = jj_gen;42 jj_la1[0] = jj_gen;
41 break label_1;43 break label_1;
42 }44 }
43 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {45 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
44 case 9:46 case 9:
45 jj_consume_token(9);47 jj_consume_token(9);
46 break;48 break;
47 case 10:49 case 10:
48 jj_consume_token(10);50 jj_consume_token(10);
49 break;51 break;
50 case 11:52 case 11:
51 jj_consume_token(11);53 jj_consume_token(11);
52 break;54 break;
53 default:55 default:
54 jj_la1[1] = jj_gen;56 jj_la1[1] = jj_gen;
55 jj_consume_token(-1);57 jj_consume_token(-1);
56 throw new ParseException();58 throw new ParseException();
57 }59 }
58 term = parseTerm();60 term = parseTerm();
59 terms.add(term);61 terms.add(term);
60 }62 }
61 if (terms.size() > 1) {63 if (terms.size() > 1) {
62 {if (true) return new Formula(terms);}64 {if (true) return new Formula(terms);}
63 } else {65 } else {
64 {if (true) return term;}66 {if (true) return term;}
65 }67 }
66 throw new Error("Missing return statement in function");68 throw new Error("Missing return statement in function");
69 } finally {
70 trace_return("parseExpression");
71 }
67 }72 }
6873
69 final public Expression parseTerm() throws ParseException {74 final public Expression parseTerm() throws ParseException {
75 trace_call("parseTerm");
76 try {
70 Expression factor;77 Expression factor;
71 List<Expression> factors = new LinkedList<Expression>();78 List<Expression> factors = new LinkedList<Expression>();
72 factor = parseFactor();79 factor = parseFactor();
73 factors.add(factor);80 factors.add(factor);
74 label_2:81 label_2:
75 while (true) {82 while (true) {
76 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {83 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
77 case CONST0:84 case CONST0:
78 case CONST1:85 case CONST1:
79 case NAME:86 case NAME:
80 case 12:87 case 12:
81 case 13:88 case 13:
82 case 14:89 case 14:
83 case 15:90 case 15:
84 case 16:91 case 16:
85 case 17:92 case 17:
86 ;93 ;
87 break;94 break;
88 default:95 default:
89 jj_la1[2] = jj_gen;96 jj_la1[2] = jj_gen;
90 break label_2;97 break label_2;
91 }98 }
92 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {99 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
93 case 12:100 case 12:
94 case 13:101 case 13:
95 case 14:102 case 14:
96 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {103 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
97 case 12:104 case 12:
98 jj_consume_token(12);105 jj_consume_token(12);
99 break;106 break;
100 case 13:107 case 13:
101 jj_consume_token(13);108 jj_consume_token(13);
102 break;109 break;
103 case 14:110 case 14:
104 jj_consume_token(14);111 jj_consume_token(14);
105 break;112 break;
106 default:113 default:
107 jj_la1[3] = jj_gen;114 jj_la1[3] = jj_gen;
108 jj_consume_token(-1);115 jj_consume_token(-1);
109 throw new ParseException();116 throw new ParseException();
110 }117 }
111 break;118 break;
112 default:119 default:
113 jj_la1[4] = jj_gen;120 jj_la1[4] = jj_gen;
114 ;121 ;
115 }122 }
116 factor = parseFactor();123 factor = parseFactor();
117 factors.add(factor);124 factors.add(factor);
118 }125 }
119 if (factors.size() > 1) {126 if (factors.size() > 1) {
120 {if (true) return new Term(factors);}127 {if (true) return new Term(factors);}
121 } else {128 } else {
122 {if (true) return factor;}129 {if (true) return factor;}
123 }130 }
124 throw new Error("Missing return statement in function");131 throw new Error("Missing return statement in function");
132 } finally {
133 trace_return("parseTerm");
134 }
125 }135 }
126136
127 final public Expression parseFactor() throws ParseException {137 final public Expression parseFactor() throws ParseException {
138 trace_call("parseFactor");
139 try {
128 Expression expression;140 Expression expression;
129 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
130 case NAME:
131 expression = parseLiteral();
132 break;
133 case CONST0:
134 case CONST1:
135 expression = parseConstant();
136 break;
137 case 15:
138 case 16:
139 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {141 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
142 case NAME:
143 expression = parseLiteral();
144 break;
145 case CONST0:
146 case CONST1:
147 expression = parseConstant();
148 break;
140 case 15:149 case 15:
141 jj_consume_token(15);
142 break;
143 case 16:150 case 16:
144 jj_consume_token(16);151 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
145 break;152 case 15:
146 default:153 jj_consume_token(15);
147 jj_la1[5] = jj_gen;154 break;
148 jj_consume_token(-1);155 case 16:
149 throw new ParseException();156 jj_consume_token(16);
150 }157 break;
151 expression = parseFactor();158 default:
159 jj_la1[5] = jj_gen;
160 jj_consume_token(-1);
161 throw new ParseException();
162 }
163 expression = parseFactor();
152 {if (true) return new Negation(expression);}164 {if (true) return new Negation(expression);}
153 break;165 break;
154 case 17:166 case 17:
155 jj_consume_token(17);167 jj_consume_token(17);
156 expression = parseExpression();168 expression = parseExpression();
157 jj_consume_token(18);169 jj_consume_token(18);
158 {if (true) return new Factor(expression);}170 {if (true) return new Factor(expression);}
159 break;171 break;
160 default:172 default:
161 jj_la1[6] = jj_gen;173 jj_la1[6] = jj_gen;
162 jj_consume_token(-1);174 jj_consume_token(-1);
163 throw new ParseException();175 throw new ParseException();
164 }176 }
165 {if (true) return expression;}177 {if (true) return expression;}
166 throw new Error("Missing return statement in function");178 throw new Error("Missing return statement in function");
179 } finally {
180 trace_return("parseFactor");
181 }
167 }182 }
168183
169 final public Expression parseLiteral() throws ParseException {184 final public Expression parseLiteral() throws ParseException {
185 trace_call("parseLiteral");
186 try {
170 Token nameToken;187 Token nameToken;
171 nameToken = jj_consume_token(NAME);188 nameToken = jj_consume_token(NAME);
172 String name = nameToken.image;189 String name = nameToken.image;
173 {if (true) return new Literal(name);}190 {if (true) return new Literal(name);}
174 throw new Error("Missing return statement in function");191 throw new Error("Missing return statement in function");
192 } finally {
193 trace_return("parseLiteral");
194 }
175 }195 }
176196
177 final public Expression parseConstant() throws ParseException {197 final public Expression parseConstant() throws ParseException {
178 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {198 trace_call("parseConstant");
179 case CONST0:199 try {
180 jj_consume_token(CONST0);200 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
201 case CONST0:
202 jj_consume_token(CONST0);
181 {if (true) return new Constant(false);}203 {if (true) return new Constant(false);}
182 break;204 break;
183 case CONST1:205 case CONST1:
184 jj_consume_token(CONST1);206 jj_consume_token(CONST1);
185 {if (true) return new Constant(true);}207 {if (true) return new Constant(true);}
186 break;208 break;
187 default:209 default:
188 jj_la1[7] = jj_gen;210 jj_la1[7] = jj_gen;
189 jj_consume_token(-1);211 jj_consume_token(-1);
190 throw new ParseException();212 throw new ParseException();
213 }
214 throw new Error("Missing return statement in function");
215 } finally {
216 trace_return("parseConstant");
191 }217 }
192 throw new Error("Missing return statement in function");
193 }218 }
194219
195 /** Generated Token Manager. */220 /** Generated Token Manager. */
@@ -283,6 +308,7 @@
283 jj_ntk = -1;308 jj_ntk = -1;
284 if (token.kind == kind) {309 if (token.kind == kind) {
285 jj_gen++;310 jj_gen++;
311 trace_token(token, "");
286 return token;312 return token;
287 }313 }
288 token = oldToken;314 token = oldToken;
@@ -297,6 +323,7 @@
297 else token = token.next = token_source.getNextToken();323 else token = token.next = token_source.getNextToken();
298 jj_ntk = -1;324 jj_ntk = -1;
299 jj_gen++;325 jj_gen++;
326 trace_token(token, " (in getNextToken)");
300 return token;327 return token;
301 }328 }
302329
@@ -352,12 +379,55 @@
352 return new ParseException(token, exptokseq, tokenImage);379 return new ParseException(token, exptokseq, tokenImage);
353 }380 }
354381
355 /** Enable tracing. */382 private int trace_indent = 0;
383 private boolean trace_enabled = true;
384
385/** Enable tracing. */
356 final public void enable_tracing() {386 final public void enable_tracing() {
387 trace_enabled = true;
357 }388 }
358389
359 /** Disable tracing. */390/** Disable tracing. */
360 final public void disable_tracing() {391 final public void disable_tracing() {
392 trace_enabled = false;
393 }
394
395 private void trace_call(String s) {
396 if (trace_enabled) {
397 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
398 System.out.println("Call: " + s);
399 }
400 trace_indent = trace_indent + 2;
401 }
402
403 private void trace_return(String s) {
404 trace_indent = trace_indent - 2;
405 if (trace_enabled) {
406 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
407 System.out.println("Return: " + s);
408 }
409 }
410
411 private void trace_token(Token t, String where) {
412 if (trace_enabled) {
413 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
414 System.out.print("Consumed token: <" + tokenImage[t.kind]);
415 if (t.kind != 0 && !tokenImage[t.kind].equals("\"" + t.image + "\"")) {
416 System.out.print(": \"" + t.image + "\"");
417 }
418 System.out.println(" at line " + t.beginLine + " column " + t.beginColumn + ">" + where);
419 }
420 }
421
422 private void trace_scan(Token t1, int t2) {
423 if (trace_enabled) {
424 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
425 System.out.print("Visited token: <" + tokenImage[t1.kind]);
426 if (t1.kind != 0 && !tokenImage[t1.kind].equals("\"" + t1.image + "\"")) {
427 System.out.print(": \"" + t1.image + "\"");
428 }
429 System.out.println(" at line " + t1.beginLine + " column " + t1.beginColumn + ">; Expected token: <" + tokenImage[t2] + ">");
430 }
361 }431 }
362432
363}433}
364434
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/ExpressionParser.jj'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/ExpressionParser.jj 2015-10-22 16:04:43 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/ExpressionParser.jj 2015-11-09 09:38:45 +0000
@@ -6,7 +6,8 @@
6 JDK_VERSION = "1.7";6 JDK_VERSION = "1.7";
7 LOOKAHEAD = 1;7 LOOKAHEAD = 1;
8 STATIC = false;8 STATIC = false;
9 DEBUG_PARSER = false;9 DEBUG_PARSER = true;
10 DEBUG_LOOKAHEAD = false;
10 DEBUG_TOKEN_MANAGER = false;11 DEBUG_TOKEN_MANAGER = false;
11}12}
1213
1314
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/GenlibParser.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/GenlibParser.java 2015-10-19 17:34:06 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/GenlibParser.java 2015-11-09 09:38:45 +0000
@@ -20,241 +20,291 @@
20public class GenlibParser implements GenlibParserConstants {20public class GenlibParser implements GenlibParserConstants {
2121
22 final public Library parseGenlib() throws ParseException {22 final public Library parseGenlib() throws ParseException {
23 trace_call("parseGenlib");
24 try {
23 List<Gate> gates;25 List<Gate> gates;
24 gates = parseGates();26 gates = parseGates();
25 {if (true) return new Library(gates);}27 {if (true) return new Library(gates);}
26 throw new Error("Missing return statement in function");28 throw new Error("Missing return statement in function");
29 } finally {
30 trace_return("parseGenlib");
31 }
27 }32 }
2833
29 final public List<Gate> parseGates() throws ParseException {34 final public List<Gate> parseGates() throws ParseException {
35 trace_call("parseGates");
36 try {
30 Gate gate;37 Gate gate;
31 List<Gate> gates = new LinkedList<Gate>();38 List<Gate> gates = new LinkedList<Gate>();
32 label_1:39 label_1:
33 while (true) {40 while (true) {
34 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {41 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
35 case GATE:42 case GATE:
36 case LATCH:43 case LATCH:
37 ;44 ;
38 break;45 break;
39 default:46 default:
40 jj_la1[0] = jj_gen;47 jj_la1[0] = jj_gen;
41 break label_1;48 break label_1;
42 }49 }
43 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {50 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
44 case GATE:51 case GATE:
45 gate = parseGate();52 gate = parseGate();
46 break;53 break;
47 case LATCH:54 case LATCH:
48 gate = parseLatch();55 gate = parseLatch();
49 break;56 break;
50 default:57 default:
51 jj_la1[1] = jj_gen;58 jj_la1[1] = jj_gen;
52 jj_consume_token(-1);59 jj_consume_token(-1);
53 throw new ParseException();60 throw new ParseException();
54 }61 }
55 gates.add(gate);62 gates.add(gate);
56 }63 }
57 {if (true) return gates;}64 {if (true) return gates;}
58 throw new Error("Missing return statement in function");65 throw new Error("Missing return statement in function");
66 } finally {
67 trace_return("parseGates");
68 }
59 }69 }
6070
61 final public Gate parseGate() throws ParseException {71 final public Gate parseGate() throws ParseException {
72 trace_call("parseGate");
73 try {
62 String name;74 String name;
63 Function function;75 Function function;
64 jj_consume_token(GATE);76 jj_consume_token(GATE);
65 name = parseName();77 name = parseName();
66 jj_consume_token(NUMERAL);78 jj_consume_token(NUMERAL);
67 function = parseFunction();79 function = parseFunction();
68 label_2:80 label_2:
69 while (true) {81 while (true) {
70 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {82 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
71 case PIN:83 case PIN:
72 ;84 ;
73 break;85 break;
74 default:86 default:
75 jj_la1[2] = jj_gen;87 jj_la1[2] = jj_gen;
76 break label_2;88 break label_2;
89 }
90 parsePin();
77 }91 }
78 parsePin();
79 }
80 {if (true) return new Gate(name, function, null, false);}92 {if (true) return new Gate(name, function, null, false);}
81 throw new Error("Missing return statement in function");93 throw new Error("Missing return statement in function");
94 } finally {
95 trace_return("parseGate");
96 }
82 }97 }
8398
84 final public Gate parseLatch() throws ParseException {99 final public Gate parseLatch() throws ParseException {
100 trace_call("parseLatch");
101 try {
85 String name;102 String name;
86 Function function;103 Function function;
87 String next;104 String next;
88 jj_consume_token(LATCH);105 jj_consume_token(LATCH);
89 name = parseName();106 name = parseName();
90 jj_consume_token(NUMERAL);107 jj_consume_token(NUMERAL);
91 function = parseFunction();108 function = parseFunction();
92 label_3:109 label_3:
93 while (true) {110 while (true) {
94 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {111 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
95 case PIN:112 case PIN:
96 ;113 ;
97 break;114 break;
98 default:115 default:
99 jj_la1[3] = jj_gen;116 jj_la1[3] = jj_gen;
100 break label_3;117 break label_3;
101 }118 }
102 parsePin();119 parsePin();
103 }120 }
104 next = parseSeq();121 next = parseSeq();
105 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {122 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
106 case CONTROL:123 case CONTROL:
107 parseControl();124 parseControl();
108 break;125 break;
109 default:126 default:
110 jj_la1[4] = jj_gen;127 jj_la1[4] = jj_gen;
111 ;128 ;
112 }129 }
113 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {130 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
114 case CONSTRAINT:131 case CONSTRAINT:
115 parseConstraint();132 parseConstraint();
116 break;133 break;
117 default:134 default:
118 jj_la1[5] = jj_gen;135 jj_la1[5] = jj_gen;
119 ;136 ;
120 }137 }
121 {if (true) return new Gate(name, function, next, false);}138 {if (true) return new Gate(name, function, next, false);}
122 throw new Error("Missing return statement in function");139 throw new Error("Missing return statement in function");
140 } finally {
141 trace_return("parseLatch");
142 }
123 }143 }
124144
125 final public String parseName() throws ParseException {145 final public String parseName() throws ParseException {
146 trace_call("parseName");
147 try {
126 Token nameToken;148 Token nameToken;
127 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {149 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
128 case NAME:150 case NAME:
129 nameToken = jj_consume_token(NAME);151 nameToken = jj_consume_token(NAME);
130 {if (true) return nameToken.image;}152 {if (true) return nameToken.image;}
131 break;153 break;
132 case STRING:154 case STRING:
133 nameToken = jj_consume_token(STRING);155 nameToken = jj_consume_token(STRING);
134 String s = nameToken.image;156 String s = nameToken.image;
135 {if (true) return s.substring(1, s.length()-1);}157 {if (true) return s.substring(1, s.length()-1);}
136 break;158 break;
137 default:159 default:
138 jj_la1[6] = jj_gen;160 jj_la1[6] = jj_gen;
139 jj_consume_token(-1);161 jj_consume_token(-1);
140 throw new ParseException();162 throw new ParseException();
163 }
164 throw new Error("Missing return statement in function");
165 } finally {
166 trace_return("parseName");
141 }167 }
142 throw new Error("Missing return statement in function");
143 }168 }
144169
145 final public Function parseFunction() throws ParseException {170 final public Function parseFunction() throws ParseException {
171 trace_call("parseFunction");
172 try {
146 Token nameToken;173 Token nameToken;
147 Token formulaToken;174 Token formulaToken;
148 nameToken = jj_consume_token(NAME);175 nameToken = jj_consume_token(NAME);
149 formulaToken = jj_consume_token(FORMULA);176 formulaToken = jj_consume_token(FORMULA);
150 String formula = formulaToken.image.replaceAll("^=", "").replaceAll(";$", "");177 String formula = formulaToken.image.replaceAll("^=", "").replaceAll(";$", "");
151 {if (true) return new Function(nameToken.image, formula);}178 {if (true) return new Function(nameToken.image, formula);}
152 throw new Error("Missing return statement in function");179 throw new Error("Missing return statement in function");
180 } finally {
181 trace_return("parseFunction");
182 }
153 }183 }
154184
155 final public void parsePin() throws ParseException {185 final public void parsePin() throws ParseException {
156 jj_consume_token(PIN);186 trace_call("parsePin");
157 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {187 try {
158 case NAME:188 jj_consume_token(PIN);
159 jj_consume_token(NAME);189 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
160 break;190 case NAME:
161 case ANY_NAME:191 jj_consume_token(NAME);
162 jj_consume_token(ANY_NAME);192 break;
163 break;193 case ANY_NAME:
164 default:194 jj_consume_token(ANY_NAME);
165 jj_la1[7] = jj_gen;195 break;
166 jj_consume_token(-1);196 default:
167 throw new ParseException();197 jj_la1[7] = jj_gen;
168 }198 jj_consume_token(-1);
169 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {199 throw new ParseException();
170 case INV:200 }
171 case NONINV:
172 case UNKNOWN:
173 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {201 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
174 case INV:202 case INV:
175 jj_consume_token(INV);
176 break;
177 case NONINV:203 case NONINV:
178 jj_consume_token(NONINV);
179 break;
180 case UNKNOWN:204 case UNKNOWN:
181 jj_consume_token(UNKNOWN);205 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
206 case INV:
207 jj_consume_token(INV);
208 break;
209 case NONINV:
210 jj_consume_token(NONINV);
211 break;
212 case UNKNOWN:
213 jj_consume_token(UNKNOWN);
214 break;
215 default:
216 jj_la1[8] = jj_gen;
217 jj_consume_token(-1);
218 throw new ParseException();
219 }
182 break;220 break;
183 default:221 default:
184 jj_la1[8] = jj_gen;222 jj_la1[9] = jj_gen;
185 jj_consume_token(-1);223 ;
186 throw new ParseException();
187 }224 }
188 break;225 jj_consume_token(NUMERAL);
189 default:226 jj_consume_token(NUMERAL);
190 jj_la1[9] = jj_gen;227 jj_consume_token(NUMERAL);
191 ;228 jj_consume_token(NUMERAL);
229 jj_consume_token(NUMERAL);
230 jj_consume_token(NUMERAL);
231 } finally {
232 trace_return("parsePin");
192 }233 }
193 jj_consume_token(NUMERAL);
194 jj_consume_token(NUMERAL);
195 jj_consume_token(NUMERAL);
196 jj_consume_token(NUMERAL);
197 jj_consume_token(NUMERAL);
198 jj_consume_token(NUMERAL);
199 }234 }
200235
201 final public String parseSeq() throws ParseException {236 final public String parseSeq() throws ParseException {
237 trace_call("parseSeq");
238 try {
202 Token nextToken = null;239 Token nextToken = null;
203 jj_consume_token(SEQ);240 jj_consume_token(SEQ);
204 jj_consume_token(NAME);241 jj_consume_token(NAME);
205 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {242 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
206 case NAME:243 case NAME:
207 nextToken = jj_consume_token(NAME);244 nextToken = jj_consume_token(NAME);
208 break;245 break;
209 case ANY:246 case ANY:
210 jj_consume_token(ANY);247 jj_consume_token(ANY);
211 break;248 break;
212 default:249 default:
213 jj_la1[10] = jj_gen;250 jj_la1[10] = jj_gen;
214 jj_consume_token(-1);251 jj_consume_token(-1);
215 throw new ParseException();252 throw new ParseException();
216 }253 }
217 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {254 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
218 case ACTIVE_LOW:255 case ACTIVE_LOW:
219 jj_consume_token(ACTIVE_LOW);256 jj_consume_token(ACTIVE_LOW);
220 break;257 break;
221 case ACTIVE_HIGH:258 case ACTIVE_HIGH:
222 jj_consume_token(ACTIVE_HIGH);259 jj_consume_token(ACTIVE_HIGH);
223 break;260 break;
224 case RISING_EDGE:261 case RISING_EDGE:
225 jj_consume_token(RISING_EDGE);262 jj_consume_token(RISING_EDGE);
226 break;263 break;
227 case FALLING_EDGE:264 case FALLING_EDGE:
228 jj_consume_token(FALLING_EDGE);265 jj_consume_token(FALLING_EDGE);
229 break;266 break;
230 case ASYNCH:267 case ASYNCH:
231 jj_consume_token(ASYNCH);268 jj_consume_token(ASYNCH);
232 break;269 break;
233 default:270 default:
234 jj_la1[11] = jj_gen;271 jj_la1[11] = jj_gen;
235 jj_consume_token(-1);272 jj_consume_token(-1);
236 throw new ParseException();273 throw new ParseException();
237 }274 }
238 {if (true) return ((nextToken == null) ? null : nextToken.image);}275 {if (true) return ((nextToken == null) ? null : nextToken.image);}
239 throw new Error("Missing return statement in function");276 throw new Error("Missing return statement in function");
277 } finally {
278 trace_return("parseSeq");
279 }
240 }280 }
241281
242 final public void parseControl() throws ParseException {282 final public void parseControl() throws ParseException {
243 jj_consume_token(CONTROL);283 trace_call("parseControl");
244 jj_consume_token(NAME);284 try {
245 jj_consume_token(NUMERAL);285 jj_consume_token(CONTROL);
246 jj_consume_token(NUMERAL);286 jj_consume_token(NAME);
247 jj_consume_token(NUMERAL);287 jj_consume_token(NUMERAL);
248 jj_consume_token(NUMERAL);288 jj_consume_token(NUMERAL);
249 jj_consume_token(NUMERAL);289 jj_consume_token(NUMERAL);
250 jj_consume_token(NUMERAL);290 jj_consume_token(NUMERAL);
291 jj_consume_token(NUMERAL);
292 jj_consume_token(NUMERAL);
293 } finally {
294 trace_return("parseControl");
295 }
251 }296 }
252297
253 final public void parseConstraint() throws ParseException {298 final public void parseConstraint() throws ParseException {
254 jj_consume_token(CONSTRAINT);299 trace_call("parseConstraint");
255 jj_consume_token(NAME);300 try {
256 jj_consume_token(NUMERAL);301 jj_consume_token(CONSTRAINT);
257 jj_consume_token(NUMERAL);302 jj_consume_token(NAME);
303 jj_consume_token(NUMERAL);
304 jj_consume_token(NUMERAL);
305 } finally {
306 trace_return("parseConstraint");
307 }
258 }308 }
259309
260 /** Generated Token Manager. */310 /** Generated Token Manager. */
@@ -348,6 +398,7 @@
348 jj_ntk = -1;398 jj_ntk = -1;
349 if (token.kind == kind) {399 if (token.kind == kind) {
350 jj_gen++;400 jj_gen++;
401 trace_token(token, "");
351 return token;402 return token;
352 }403 }
353 token = oldToken;404 token = oldToken;
@@ -362,6 +413,7 @@
362 else token = token.next = token_source.getNextToken();413 else token = token.next = token_source.getNextToken();
363 jj_ntk = -1;414 jj_ntk = -1;
364 jj_gen++;415 jj_gen++;
416 trace_token(token, " (in getNextToken)");
365 return token;417 return token;
366 }418 }
367419
@@ -417,12 +469,55 @@
417 return new ParseException(token, exptokseq, tokenImage);469 return new ParseException(token, exptokseq, tokenImage);
418 }470 }
419471
420 /** Enable tracing. */472 private int trace_indent = 0;
473 private boolean trace_enabled = true;
474
475/** Enable tracing. */
421 final public void enable_tracing() {476 final public void enable_tracing() {
477 trace_enabled = true;
422 }478 }
423479
424 /** Disable tracing. */480/** Disable tracing. */
425 final public void disable_tracing() {481 final public void disable_tracing() {
482 trace_enabled = false;
483 }
484
485 private void trace_call(String s) {
486 if (trace_enabled) {
487 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
488 System.out.println("Call: " + s);
489 }
490 trace_indent = trace_indent + 2;
491 }
492
493 private void trace_return(String s) {
494 trace_indent = trace_indent - 2;
495 if (trace_enabled) {
496 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
497 System.out.println("Return: " + s);
498 }
499 }
500
501 private void trace_token(Token t, String where) {
502 if (trace_enabled) {
503 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
504 System.out.print("Consumed token: <" + tokenImage[t.kind]);
505 if (t.kind != 0 && !tokenImage[t.kind].equals("\"" + t.image + "\"")) {
506 System.out.print(": \"" + t.image + "\"");
507 }
508 System.out.println(" at line " + t.beginLine + " column " + t.beginColumn + ">" + where);
509 }
510 }
511
512 private void trace_scan(Token t1, int t2) {
513 if (trace_enabled) {
514 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
515 System.out.print("Visited token: <" + tokenImage[t1.kind]);
516 if (t1.kind != 0 && !tokenImage[t1.kind].equals("\"" + t1.image + "\"")) {
517 System.out.print(": \"" + t1.image + "\"");
518 }
519 System.out.println(" at line " + t1.beginLine + " column " + t1.beginColumn + ">; Expected token: <" + tokenImage[t2] + ">");
520 }
426 }521 }
427522
428}523}
429524
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/GenlibParser.jj'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/GenlibParser.jj 2015-10-19 17:34:06 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/GenlibParser.jj 2015-11-09 09:38:45 +0000
@@ -6,7 +6,9 @@
6 JDK_VERSION = "1.7";6 JDK_VERSION = "1.7";
7 LOOKAHEAD = 1;7 LOOKAHEAD = 1;
8 STATIC = false;8 STATIC = false;
9 DEBUG_PARSER = false;9 DEBUG_PARSER = true;
10 DEBUG_LOOKAHEAD = false;
11 DEBUG_TOKEN_MANAGER = false;
10}12}
1113
12PARSER_BEGIN(GenlibParser)14PARSER_BEGIN(GenlibParser)
1315
=== added file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParser.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParser.java 1970-01-01 00:00:00 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParser.java 2015-11-09 09:38:45 +0000
@@ -0,0 +1,315 @@
1/* Generated By:JavaCC: Do not edit this line. SubstitutionParser.java */
2package org.workcraft.plugins.circuit.javacc;
3
4import java.util.List;
5import java.util.LinkedList;
6import java.util.Map;
7import java.util.HashMap;
8
9import org.workcraft.util.Pair;
10import org.workcraft.plugins.circuit.verilog.SubstitutionRule;
11
12public class SubstitutionParser implements SubstitutionParserConstants {
13
14 final public List<SubstitutionRule> parseSubstitutionRules() throws ParseException {
15 trace_call("parseSubstitutionRules");
16 try {
17 SubstitutionRule rule;
18 List<SubstitutionRule> rules = new LinkedList<SubstitutionRule>();
19 label_1:
20 while (true) {
21 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
22 case EXTENDED_NAME:
23 ;
24 break;
25 default:
26 jj_la1[0] = jj_gen;
27 break label_1;
28 }
29 rule = parseSubstitutionRule();
30 rules.add(rule);
31 }
32 {if (true) return rules;}
33 throw new Error("Missing return statement in function");
34 } finally {
35 trace_return("parseSubstitutionRules");
36 }
37 }
38
39 final public SubstitutionRule parseSubstitutionRule() throws ParseException {
40 trace_call("parseSubstitutionRule");
41 try {
42 Pair<String, String> gateSubstitution;
43 Pair<String, String> portSubstitution;
44 Map<String, String> portSubstitutions = new HashMap<String, String>();
45 gateSubstitution = parseSubstitution();
46 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
47 case 8:
48 jj_consume_token(8);
49 label_2:
50 while (true) {
51 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
52 case EXTENDED_NAME:
53 ;
54 break;
55 default:
56 jj_la1[1] = jj_gen;
57 break label_2;
58 }
59 portSubstitution = parseSubstitution();
60 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
61 case 10:
62 jj_consume_token(10);
63 break;
64 default:
65 jj_la1[2] = jj_gen;
66 ;
67 }
68 String oldPortName = portSubstitution.getFirst();
69 String newPortName = portSubstitution.getSecond();
70 portSubstitutions.put(oldPortName, newPortName);
71 }
72 jj_consume_token(9);
73 break;
74 default:
75 jj_la1[3] = jj_gen;
76 ;
77 }
78 String oldGateName = gateSubstitution.getFirst();
79 String newGateName = gateSubstitution.getSecond();
80 {if (true) return new SubstitutionRule(oldGateName, newGateName, portSubstitutions);}
81 throw new Error("Missing return statement in function");
82 } finally {
83 trace_return("parseSubstitutionRule");
84 }
85 }
86
87 final public Pair<String, String> parseSubstitution() throws ParseException {
88 trace_call("parseSubstitution");
89 try {
90 Token oldName;
91 Token newName;
92 oldName = jj_consume_token(EXTENDED_NAME);
93 jj_consume_token(11);
94 newName = jj_consume_token(EXTENDED_NAME);
95 {if (true) return new Pair(oldName.image, newName.image);}
96 throw new Error("Missing return statement in function");
97 } finally {
98 trace_return("parseSubstitution");
99 }
100 }
101
102 /** Generated Token Manager. */
103 public SubstitutionParserTokenManager token_source;
104 SimpleCharStream jj_input_stream;
105 /** Current token. */
106 public Token token;
107 /** Next token. */
108 public Token jj_nt;
109 private int jj_ntk;
110 private int jj_gen;
111 final private int[] jj_la1 = new int[4];
112 static private int[] jj_la1_0;
113 static {
114 jj_la1_init_0();
115 }
116 private static void jj_la1_init_0() {
117 jj_la1_0 = new int[] {0x80,0x80,0x400,0x100,};
118 }
119
120 /** Constructor with InputStream. */
121 public SubstitutionParser(java.io.InputStream stream) {
122 this(stream, null);
123 }
124 /** Constructor with InputStream and supplied encoding */
125 public SubstitutionParser(java.io.InputStream stream, String encoding) {
126 try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
127 token_source = new SubstitutionParserTokenManager(jj_input_stream);
128 token = new Token();
129 jj_ntk = -1;
130 jj_gen = 0;
131 for (int i = 0; i < 4; i++) jj_la1[i] = -1;
132 }
133
134 /** Reinitialise. */
135 public void ReInit(java.io.InputStream stream) {
136 ReInit(stream, null);
137 }
138 /** Reinitialise. */
139 public void ReInit(java.io.InputStream stream, String encoding) {
140 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
141 token_source.ReInit(jj_input_stream);
142 token = new Token();
143 jj_ntk = -1;
144 jj_gen = 0;
145 for (int i = 0; i < 4; i++) jj_la1[i] = -1;
146 }
147
148 /** Constructor. */
149 public SubstitutionParser(java.io.Reader stream) {
150 jj_input_stream = new SimpleCharStream(stream, 1, 1);
151 token_source = new SubstitutionParserTokenManager(jj_input_stream);
152 token = new Token();
153 jj_ntk = -1;
154 jj_gen = 0;
155 for (int i = 0; i < 4; i++) jj_la1[i] = -1;
156 }
157
158 /** Reinitialise. */
159 public void ReInit(java.io.Reader stream) {
160 jj_input_stream.ReInit(stream, 1, 1);
161 token_source.ReInit(jj_input_stream);
162 token = new Token();
163 jj_ntk = -1;
164 jj_gen = 0;
165 for (int i = 0; i < 4; i++) jj_la1[i] = -1;
166 }
167
168 /** Constructor with generated Token Manager. */
169 public SubstitutionParser(SubstitutionParserTokenManager tm) {
170 token_source = tm;
171 token = new Token();
172 jj_ntk = -1;
173 jj_gen = 0;
174 for (int i = 0; i < 4; i++) jj_la1[i] = -1;
175 }
176
177 /** Reinitialise. */
178 public void ReInit(SubstitutionParserTokenManager tm) {
179 token_source = tm;
180 token = new Token();
181 jj_ntk = -1;
182 jj_gen = 0;
183 for (int i = 0; i < 4; i++) jj_la1[i] = -1;
184 }
185
186 private Token jj_consume_token(int kind) throws ParseException {
187 Token oldToken;
188 if ((oldToken = token).next != null) token = token.next;
189 else token = token.next = token_source.getNextToken();
190 jj_ntk = -1;
191 if (token.kind == kind) {
192 jj_gen++;
193 trace_token(token, "");
194 return token;
195 }
196 token = oldToken;
197 jj_kind = kind;
198 throw generateParseException();
199 }
200
201
202/** Get the next Token. */
203 final public Token getNextToken() {
204 if (token.next != null) token = token.next;
205 else token = token.next = token_source.getNextToken();
206 jj_ntk = -1;
207 jj_gen++;
208 trace_token(token, " (in getNextToken)");
209 return token;
210 }
211
212/** Get the specific Token. */
213 final public Token getToken(int index) {
214 Token t = token;
215 for (int i = 0; i < index; i++) {
216 if (t.next != null) t = t.next;
217 else t = t.next = token_source.getNextToken();
218 }
219 return t;
220 }
221
222 private int jj_ntk() {
223 if ((jj_nt=token.next) == null)
224 return (jj_ntk = (token.next=token_source.getNextToken()).kind);
225 else
226 return (jj_ntk = jj_nt.kind);
227 }
228
229 private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
230 private int[] jj_expentry;
231 private int jj_kind = -1;
232
233 /** Generate ParseException. */
234 public ParseException generateParseException() {
235 jj_expentries.clear();
236 boolean[] la1tokens = new boolean[12];
237 if (jj_kind >= 0) {
238 la1tokens[jj_kind] = true;
239 jj_kind = -1;
240 }
241 for (int i = 0; i < 4; i++) {
242 if (jj_la1[i] == jj_gen) {
243 for (int j = 0; j < 32; j++) {
244 if ((jj_la1_0[i] & (1<<j)) != 0) {
245 la1tokens[j] = true;
246 }
247 }
248 }
249 }
250 for (int i = 0; i < 12; i++) {
251 if (la1tokens[i]) {
252 jj_expentry = new int[1];
253 jj_expentry[0] = i;
254 jj_expentries.add(jj_expentry);
255 }
256 }
257 int[][] exptokseq = new int[jj_expentries.size()][];
258 for (int i = 0; i < jj_expentries.size(); i++) {
259 exptokseq[i] = jj_expentries.get(i);
260 }
261 return new ParseException(token, exptokseq, tokenImage);
262 }
263
264 private int trace_indent = 0;
265 private boolean trace_enabled = true;
266
267/** Enable tracing. */
268 final public void enable_tracing() {
269 trace_enabled = true;
270 }
271
272/** Disable tracing. */
273 final public void disable_tracing() {
274 trace_enabled = false;
275 }
276
277 private void trace_call(String s) {
278 if (trace_enabled) {
279 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
280 System.out.println("Call: " + s);
281 }
282 trace_indent = trace_indent + 2;
283 }
284
285 private void trace_return(String s) {
286 trace_indent = trace_indent - 2;
287 if (trace_enabled) {
288 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
289 System.out.println("Return: " + s);
290 }
291 }
292
293 private void trace_token(Token t, String where) {
294 if (trace_enabled) {
295 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
296 System.out.print("Consumed token: <" + tokenImage[t.kind]);
297 if (t.kind != 0 && !tokenImage[t.kind].equals("\"" + t.image + "\"")) {
298 System.out.print(": \"" + t.image + "\"");
299 }
300 System.out.println(" at line " + t.beginLine + " column " + t.beginColumn + ">" + where);
301 }
302 }
303
304 private void trace_scan(Token t1, int t2) {
305 if (trace_enabled) {
306 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
307 System.out.print("Visited token: <" + tokenImage[t1.kind]);
308 if (t1.kind != 0 && !tokenImage[t1.kind].equals("\"" + t1.image + "\"")) {
309 System.out.print(": \"" + t1.image + "\"");
310 }
311 System.out.println(" at line " + t1.beginLine + " column " + t1.beginColumn + ">; Expected token: <" + tokenImage[t2] + ">");
312 }
313 }
314
315}
0316
=== added file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParser.jj'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParser.jj 1970-01-01 00:00:00 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParser.jj 2015-11-09 09:38:45 +0000
@@ -0,0 +1,100 @@
1/**
2 * JavaCC file
3 */
4
5options {
6 JDK_VERSION = "1.7";
7 LOOKAHEAD = 1;
8 STATIC = false;
9 DEBUG_PARSER = true;
10 DEBUG_LOOKAHEAD = false;
11 DEBUG_TOKEN_MANAGER = false;
12}
13
14PARSER_BEGIN(SubstitutionParser)
15package org.workcraft.plugins.circuit.javacc;
16
17import java.util.List;
18import java.util.LinkedList;
19import java.util.Map;
20import java.util.HashMap;
21
22import org.workcraft.util.Pair;
23import org.workcraft.plugins.circuit.verilog.SubstitutionRule;
24
25public class SubstitutionParser {
26}
27PARSER_END(SubstitutionParser)
28
29SKIP:
30{
31 " "
32| "\t"
33| "\r"
34| "\n"
35| <"//" (~["\r", "\n"])*>
36| < "`" (~["\r", "\n"])*>
37}
38
39TOKEN :
40{
41 <EXTENDED_NAME : ["A"-"Z", "a"-"z", "_", "/" ] ([ "A"-"Z", "a"-"z", "_", "0"-"9", ":", "/", "\\", "-"])*>
42| "("
43| ")"
44| ","
45}
46
47List<SubstitutionRule> parseSubstitutionRules() :
48{
49 SubstitutionRule rule;
50 List<SubstitutionRule> rules = new LinkedList<SubstitutionRule>();
51}
52{
53 (
54 rule = parseSubstitutionRule()
55 {
56 rules.add(rule);
57 }
58 )*
59 {
60 return rules;
61 }
62}
63
64SubstitutionRule parseSubstitutionRule() :
65{
66 Pair<String, String> gateSubstitution;
67 Pair<String, String> portSubstitution;
68 Map<String, String> portSubstitutions = new HashMap<String, String>();
69}
70{
71 gateSubstitution = parseSubstitution()
72 [ "("
73 (
74 portSubstitution = parseSubstitution() [","]
75 {
76 String oldPortName = portSubstitution.getFirst();
77 String newPortName = portSubstitution.getSecond();
78 portSubstitutions.put(oldPortName, newPortName);
79 }
80 )*
81 ")"
82 ]
83 {
84 String oldGateName = gateSubstitution.getFirst();
85 String newGateName = gateSubstitution.getSecond();
86 return new SubstitutionRule(oldGateName, newGateName, portSubstitutions);
87 }
88}
89
90Pair<String, String> parseSubstitution():
91{
92 Token oldName;
93 Token newName;
94}
95{
96 oldName = <EXTENDED_NAME> "=" newName = <EXTENDED_NAME>
97 {
98 return new Pair(oldName.image, newName.image);
99 }
100}
0101
=== added file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParserConstants.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParserConstants.java 1970-01-01 00:00:00 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParserConstants.java 2015-11-09 09:38:45 +0000
@@ -0,0 +1,35 @@
1/* Generated By:JavaCC: Do not edit this line. SubstitutionParserConstants.java */
2package org.workcraft.plugins.circuit.javacc;
3
4
5/**
6 * Token literal values and constants.
7 * Generated by org.javacc.parser.OtherFilesGen#start()
8 */
9public interface SubstitutionParserConstants {
10
11 /** End of File. */
12 int EOF = 0;
13 /** RegularExpression Id. */
14 int EXTENDED_NAME = 7;
15
16 /** Lexical state. */
17 int DEFAULT = 0;
18
19 /** Literal token values. */
20 String[] tokenImage = {
21 "<EOF>",
22 "\" \"",
23 "\"\\t\"",
24 "\"\\r\"",
25 "\"\\n\"",
26 "<token of kind 5>",
27 "<token of kind 6>",
28 "<EXTENDED_NAME>",
29 "\"(\"",
30 "\")\"",
31 "\",\"",
32 "\"=\"",
33 };
34
35}
036
=== added file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParserTokenManager.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParserTokenManager.java 1970-01-01 00:00:00 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/SubstitutionParserTokenManager.java 2015-11-09 09:38:45 +0000
@@ -0,0 +1,399 @@
1/* Generated By:JavaCC: Do not edit this line. SubstitutionParserTokenManager.java */
2package org.workcraft.plugins.circuit.javacc;
3import java.util.List;
4import java.util.LinkedList;
5import java.util.Map;
6import java.util.HashMap;
7import org.workcraft.util.Pair;
8import org.workcraft.plugins.circuit.verilog.SubstitutionRule;
9
10/** Token Manager. */
11public class SubstitutionParserTokenManager implements SubstitutionParserConstants
12{
13
14 /** Debug output. */
15 public java.io.PrintStream debugStream = System.out;
16 /** Set debug output. */
17 public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
18private final int jjStopStringLiteralDfa_0(int pos, long active0)
19{
20 switch (pos)
21 {
22 default :
23 return -1;
24 }
25}
26private final int jjStartNfa_0(int pos, long active0)
27{
28 return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
29}
30private int jjStopAtPos(int pos, int kind)
31{
32 jjmatchedKind = kind;
33 jjmatchedPos = pos;
34 return pos + 1;
35}
36private int jjMoveStringLiteralDfa0_0()
37{
38 switch(curChar)
39 {
40 case 40:
41 return jjStopAtPos(0, 8);
42 case 41:
43 return jjStopAtPos(0, 9);
44 case 44:
45 return jjStopAtPos(0, 10);
46 case 61:
47 return jjStopAtPos(0, 11);
48 default :
49 return jjMoveNfa_0(2, 0);
50 }
51}
52static final long[] jjbitVec0 = {
53 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
54};
55private int jjMoveNfa_0(int startState, int curPos)
56{
57 int startsAt = 0;
58 jjnewStateCnt = 7;
59 int i = 1;
60 jjstateSet[0] = startState;
61 int kind = 0x7fffffff;
62 for (;;)
63 {
64 if (++jjround == 0x7fffffff)
65 ReInitRounds();
66 if (curChar < 64)
67 {
68 long l = 1L << curChar;
69 do
70 {
71 switch(jjstateSet[--i])
72 {
73 case 2:
74 if (curChar == 47)
75 {
76 if (kind > 7)
77 kind = 7;
78 jjCheckNAdd(6);
79 }
80 if (curChar == 47)
81 jjstateSet[jjnewStateCnt++] = 0;
82 break;
83 case 0:
84 if (curChar != 47)
85 break;
86 if (kind > 5)
87 kind = 5;
88 jjCheckNAdd(1);
89 break;
90 case 1:
91 if ((0xffffffffffffdbffL & l) == 0L)
92 break;
93 if (kind > 5)
94 kind = 5;
95 jjCheckNAdd(1);
96 break;
97 case 4:
98 if ((0xffffffffffffdbffL & l) == 0L)
99 break;
100 if (kind > 6)
101 kind = 6;
102 jjstateSet[jjnewStateCnt++] = 4;
103 break;
104 case 5:
105 if (curChar != 47)
106 break;
107 if (kind > 7)
108 kind = 7;
109 jjCheckNAdd(6);
110 break;
111 case 6:
112 if ((0x7ffa00000000000L & l) == 0L)
113 break;
114 if (kind > 7)
115 kind = 7;
116 jjCheckNAdd(6);
117 break;
118 default : break;
119 }
120 } while(i != startsAt);
121 }
122 else if (curChar < 128)
123 {
124 long l = 1L << (curChar & 077);
125 do
126 {
127 switch(jjstateSet[--i])
128 {
129 case 2:
130 if ((0x7fffffe87fffffeL & l) != 0L)
131 {
132 if (kind > 7)
133 kind = 7;
134 jjCheckNAdd(6);
135 }
136 else if (curChar == 96)
137 {
138 if (kind > 6)
139 kind = 6;
140 jjCheckNAdd(4);
141 }
142 break;
143 case 1:
144 if (kind > 5)
145 kind = 5;
146 jjstateSet[jjnewStateCnt++] = 1;
147 break;
148 case 3:
149 if (curChar != 96)
150 break;
151 if (kind > 6)
152 kind = 6;
153 jjCheckNAdd(4);
154 break;
155 case 4:
156 if (kind > 6)
157 kind = 6;
158 jjCheckNAdd(4);
159 break;
160 case 5:
161 if ((0x7fffffe87fffffeL & l) == 0L)
162 break;
163 if (kind > 7)
164 kind = 7;
165 jjCheckNAdd(6);
166 break;
167 case 6:
168 if ((0x7fffffe97fffffeL & l) == 0L)
169 break;
170 if (kind > 7)
171 kind = 7;
172 jjCheckNAdd(6);
173 break;
174 default : break;
175 }
176 } while(i != startsAt);
177 }
178 else
179 {
180 int i2 = (curChar & 0xff) >> 6;
181 long l2 = 1L << (curChar & 077);
182 do
183 {
184 switch(jjstateSet[--i])
185 {
186 case 1:
187 if ((jjbitVec0[i2] & l2) == 0L)
188 break;
189 if (kind > 5)
190 kind = 5;
191 jjstateSet[jjnewStateCnt++] = 1;
192 break;
193 case 4:
194 if ((jjbitVec0[i2] & l2) == 0L)
195 break;
196 if (kind > 6)
197 kind = 6;
198 jjstateSet[jjnewStateCnt++] = 4;
199 break;
200 default : break;
201 }
202 } while(i != startsAt);
203 }
204 if (kind != 0x7fffffff)
205 {
206 jjmatchedKind = kind;
207 jjmatchedPos = curPos;
208 kind = 0x7fffffff;
209 }
210 ++curPos;
211 if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt)))
212 return curPos;
213 try { curChar = input_stream.readChar(); }
214 catch(java.io.IOException e) { return curPos; }
215 }
216}
217static final int[] jjnextStates = {
218};
219
220/** Token literal values. */
221public static final String[] jjstrLiteralImages = {
222"", null, null, null, null, null, null, null, "\50", "\51", "\54", "\75", };
223
224/** Lexer state names. */
225public static final String[] lexStateNames = {
226 "DEFAULT",
227};
228static final long[] jjtoToken = {
229 0xf81L,
230};
231static final long[] jjtoSkip = {
232 0x7eL,
233};
234protected SimpleCharStream input_stream;
235private final int[] jjrounds = new int[7];
236private final int[] jjstateSet = new int[14];
237protected char curChar;
238/** Constructor. */
239public SubstitutionParserTokenManager(SimpleCharStream stream){
240 if (SimpleCharStream.staticFlag)
241 throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
242 input_stream = stream;
243}
244
245/** Constructor. */
246public SubstitutionParserTokenManager(SimpleCharStream stream, int lexState){
247 this(stream);
248 SwitchTo(lexState);
249}
250
251/** Reinitialise parser. */
252public void ReInit(SimpleCharStream stream)
253{
254 jjmatchedPos = jjnewStateCnt = 0;
255 curLexState = defaultLexState;
256 input_stream = stream;
257 ReInitRounds();
258}
259private void ReInitRounds()
260{
261 int i;
262 jjround = 0x80000001;
263 for (i = 7; i-- > 0;)
264 jjrounds[i] = 0x80000000;
265}
266
267/** Reinitialise parser. */
268public void ReInit(SimpleCharStream stream, int lexState)
269{
270 ReInit(stream);
271 SwitchTo(lexState);
272}
273
274/** Switch to specified lex state. */
275public void SwitchTo(int lexState)
276{
277 if (lexState >= 1 || lexState < 0)
278 throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
279 else
280 curLexState = lexState;
281}
282
283protected Token jjFillToken()
284{
285 final Token t;
286 final String curTokenImage;
287 final int beginLine;
288 final int endLine;
289 final int beginColumn;
290 final int endColumn;
291 String im = jjstrLiteralImages[jjmatchedKind];
292 curTokenImage = (im == null) ? input_stream.GetImage() : im;
293 beginLine = input_stream.getBeginLine();
294 beginColumn = input_stream.getBeginColumn();
295 endLine = input_stream.getEndLine();
296 endColumn = input_stream.getEndColumn();
297 t = Token.newToken(jjmatchedKind, curTokenImage);
298
299 t.beginLine = beginLine;
300 t.endLine = endLine;
301 t.beginColumn = beginColumn;
302 t.endColumn = endColumn;
303
304 return t;
305}
306
307int curLexState = 0;
308int defaultLexState = 0;
309int jjnewStateCnt;
310int jjround;
311int jjmatchedPos;
312int jjmatchedKind;
313
314/** Get the next Token. */
315public Token getNextToken()
316{
317 Token matchedToken;
318 int curPos = 0;
319
320 EOFLoop :
321 for (;;)
322 {
323 try
324 {
325 curChar = input_stream.BeginToken();
326 }
327 catch(java.io.IOException e)
328 {
329 jjmatchedKind = 0;
330 matchedToken = jjFillToken();
331 return matchedToken;
332 }
333
334 try { input_stream.backup(0);
335 while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L)
336 curChar = input_stream.BeginToken();
337 }
338 catch (java.io.IOException e1) { continue EOFLoop; }
339 jjmatchedKind = 0x7fffffff;
340 jjmatchedPos = 0;
341 curPos = jjMoveStringLiteralDfa0_0();
342 if (jjmatchedKind != 0x7fffffff)
343 {
344 if (jjmatchedPos + 1 < curPos)
345 input_stream.backup(curPos - jjmatchedPos - 1);
346 if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
347 {
348 matchedToken = jjFillToken();
349 return matchedToken;
350 }
351 else
352 {
353 continue EOFLoop;
354 }
355 }
356 int error_line = input_stream.getEndLine();
357 int error_column = input_stream.getEndColumn();
358 String error_after = null;
359 boolean EOFSeen = false;
360 try { input_stream.readChar(); input_stream.backup(1); }
361 catch (java.io.IOException e1) {
362 EOFSeen = true;
363 error_after = curPos <= 1 ? "" : input_stream.GetImage();
364 if (curChar == '\n' || curChar == '\r') {
365 error_line++;
366 error_column = 0;
367 }
368 else
369 error_column++;
370 }
371 if (!EOFSeen) {
372 input_stream.backup(1);
373 error_after = curPos <= 1 ? "" : input_stream.GetImage();
374 }
375 throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
376 }
377}
378
379private void jjCheckNAdd(int state)
380{
381 if (jjrounds[state] != jjround)
382 {
383 jjstateSet[jjnewStateCnt++] = state;
384 jjrounds[state] = jjround;
385 }
386}
387private void jjAddStates(int start, int end)
388{
389 do {
390 jjstateSet[jjnewStateCnt++] = jjnextStates[start];
391 } while (start++ != end);
392}
393private void jjCheckNAddTwoStates(int state1, int state2)
394{
395 jjCheckNAdd(state1);
396 jjCheckNAdd(state2);
397}
398
399}
0400
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/VerilogParser.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/VerilogParser.java 2015-11-02 12:32:29 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/VerilogParser.java 2015-11-09 09:38:45 +0000
@@ -17,33 +17,45 @@
17public class VerilogParser implements VerilogParserConstants {17public class VerilogParser implements VerilogParserConstants {
1818
19 final public List<Module> parseCircuit() throws ParseException {19 final public List<Module> parseCircuit() throws ParseException {
20 trace_call("parseCircuit");
21 try {
20 List<Module> modules;22 List<Module> modules;
21 modules = parseModules();23 modules = parseModules();
22 {if (true) return modules;}24 {if (true) return modules;}
23 throw new Error("Missing return statement in function");25 throw new Error("Missing return statement in function");
26 } finally {
27 trace_return("parseCircuit");
28 }
24 }29 }
2530
26 final public List<Module> parseModules() throws ParseException {31 final public List<Module> parseModules() throws ParseException {
32 trace_call("parseModules");
33 try {
27 Module module;34 Module module;
28 List<Module> modules = new LinkedList<Module>();35 List<Module> modules = new LinkedList<Module>();
29 label_1:36 label_1:
30 while (true) {37 while (true) {
31 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {38 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
32 case MODULE:39 case MODULE:
33 ;40 ;
34 break;41 break;
35 default:42 default:
36 jj_la1[0] = jj_gen;43 jj_la1[0] = jj_gen;
37 break label_1;44 break label_1;
38 }45 }
39 module = parseModule();46 module = parseModule();
40 modules.add(module);47 modules.add(module);
41 }48 }
42 {if (true) return modules;}49 {if (true) return modules;}
43 throw new Error("Missing return statement in function");50 throw new Error("Missing return statement in function");
51 } finally {
52 trace_return("parseModules");
53 }
44 }54 }
4555
46 final public Module parseModule() throws ParseException {56 final public Module parseModule() throws ParseException {
57 trace_call("parseModule");
58 try {
47 String name;59 String name;
48 List<Port> ports;60 List<Port> ports;
49 List<Assign> assigns;61 List<Assign> assigns;
@@ -51,169 +63,199 @@
51 List<Instance> group;63 List<Instance> group;
52 Set<List<Instance>> groups = new HashSet<List<Instance>>();64 Set<List<Instance>> groups = new HashSet<List<Instance>>();
53 Map<String, Boolean> signalStates = null;65 Map<String, Boolean> signalStates = null;
54 jj_consume_token(MODULE);66 jj_consume_token(MODULE);
55 name = parseModuleName();67 name = parseModuleName();
56 ports = parsePorts();68 ports = parsePorts();
57 assigns = parseAssigns();69 assigns = parseAssigns();
58 instances = parseInstances();70 instances = parseInstances();
59 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {71 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
60 case PETRIFY_UNMAPPED:72 case PETRIFY_UNMAPPED:
61 jj_consume_token(PETRIFY_UNMAPPED);73 jj_consume_token(PETRIFY_UNMAPPED);
62 label_2:74 label_2:
63 while (true) {75 while (true) {
64 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {76 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
65 case PETRIFY_EQUATION:77 case PETRIFY_EQUATION:
66 ;78 ;
67 break;79 break;
68 default:80 default:
69 jj_la1[1] = jj_gen;81 jj_la1[1] = jj_gen;
70 break label_2;82 break label_2;
71 }83 }
72 jj_consume_token(PETRIFY_EQUATION);84 jj_consume_token(PETRIFY_EQUATION);
73 group = parseInstances();85 group = parseInstances();
74 instances.addAll(group);86 instances.addAll(group);
75 groups.add(group);87 groups.add(group);
88 }
89 break;
90 default:
91 jj_la1[2] = jj_gen;
92 ;
76 }93 }
77 break;
78 default:
79 jj_la1[2] = jj_gen;
80 ;
81 }
82 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
83 case PETRIFY_INIT_STATE:
84 case MPSAT_INIT_STATE:
85 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {94 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
86 case PETRIFY_INIT_STATE:95 case PETRIFY_INIT_STATE:
87 jj_consume_token(PETRIFY_INIT_STATE);
88 break;
89 case MPSAT_INIT_STATE:96 case MPSAT_INIT_STATE:
90 jj_consume_token(MPSAT_INIT_STATE);97 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
98 case PETRIFY_INIT_STATE:
99 jj_consume_token(PETRIFY_INIT_STATE);
100 break;
101 case MPSAT_INIT_STATE:
102 jj_consume_token(MPSAT_INIT_STATE);
103 break;
104 default:
105 jj_la1[3] = jj_gen;
106 jj_consume_token(-1);
107 throw new ParseException();
108 }
109 signalStates = parseInitialState();
91 break;110 break;
92 default:111 default:
93 jj_la1[3] = jj_gen;112 jj_la1[4] = jj_gen;
94 jj_consume_token(-1);113 ;
95 throw new ParseException();
96 }114 }
97 signalStates = parseInitialState();115 jj_consume_token(ENDMODULE);
98 break;
99 default:
100 jj_la1[4] = jj_gen;
101 ;
102 }
103 jj_consume_token(ENDMODULE);
104 {if (true) return new Module(name, ports, assigns, instances, signalStates, groups);}116 {if (true) return new Module(name, ports, assigns, instances, signalStates, groups);}
105 throw new Error("Missing return statement in function");117 throw new Error("Missing return statement in function");
118 } finally {
119 trace_return("parseModule");
120 }
106 }121 }
107122
108 final public String parseModuleName() throws ParseException {123 final public String parseModuleName() throws ParseException {
124 trace_call("parseModuleName");
125 try {
109 Token nameToken;126 Token nameToken;
110 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {127 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
111 case NAME:128 case NAME:
112 nameToken = jj_consume_token(NAME);129 nameToken = jj_consume_token(NAME);
113 break;130 break;
114 case PETRIFY_NAME:131 case PETRIFY_NAME:
115 nameToken = jj_consume_token(PETRIFY_NAME);132 nameToken = jj_consume_token(PETRIFY_NAME);
116 break;133 break;
117 default:134 default:
118 jj_la1[5] = jj_gen;135 jj_la1[5] = jj_gen;
119 jj_consume_token(-1);136 jj_consume_token(-1);
120 throw new ParseException();137 throw new ParseException();
121 }138 }
122 {if (true) return nameToken.image;}139 {if (true) return nameToken.image;}
123 throw new Error("Missing return statement in function");140 throw new Error("Missing return statement in function");
141 } finally {
142 trace_return("parseModuleName");
143 }
124 }144 }
125145
126 final public List<Port> parsePorts() throws ParseException {146 final public List<Port> parsePorts() throws ParseException {
147 trace_call("parsePorts");
148 try {
127 List<Port> ports;149 List<Port> ports;
128 if (jj_2_1(2147483647)) {150 if (jj_2_1(2147483647)) {
129 ports = parseCompactPorts();151 ports = parseCompactPorts();
130 } else {152 } else {
131 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {153 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
132 case 38:154 case 38:
133 case 44:155 case 44:
134 ports = parseComplexPorts();156 ports = parseComplexPorts();
135 break;157 break;
136 default:158 default:
137 jj_la1[6] = jj_gen;159 jj_la1[6] = jj_gen;
138 jj_consume_token(-1);160 jj_consume_token(-1);
139 throw new ParseException();161 throw new ParseException();
162 }
140 }163 }
141 }
142 {if (true) return ports;}164 {if (true) return ports;}
143 throw new Error("Missing return statement in function");165 throw new Error("Missing return statement in function");
166 } finally {
167 trace_return("parsePorts");
168 }
144 }169 }
145170
146 final public List<Port> parseCompactPorts() throws ParseException {171 final public List<Port> parseCompactPorts() throws ParseException {
172 trace_call("parseCompactPorts");
173 try {
147 Port port;174 Port port;
148 List<Port> ports = new LinkedList<Port>();175 List<Port> ports = new LinkedList<Port>();
149 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {176 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
150 case 38:177 case 38:
151 jj_consume_token(38);178 jj_consume_token(38);
152 label_3:179 label_3:
153 while (true) {180 while (true) {
154 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {181 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
155 case INPUT:182 case INPUT:
156 case OUTPUT:183 case OUTPUT:
157 ;184 ;
158 break;185 break;
159 default:186 default:
160 jj_la1[7] = jj_gen;187 jj_la1[7] = jj_gen;
161 break label_3;188 break label_3;
162 }189 }
163 port = parseCompactPort();190 port = parseCompactPort();
164 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {191 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
165 case 42:192 case 42:
166 jj_consume_token(42);193 jj_consume_token(42);
167 break;194 break;
168 default:195 default:
169 jj_la1[8] = jj_gen;196 jj_la1[8] = jj_gen;
170 ;197 ;
171 }198 }
172 ports.add(port);199 ports.add(port);
200 }
201 jj_consume_token(39);
202 break;
203 default:
204 jj_la1[9] = jj_gen;
205 ;
173 }206 }
174 jj_consume_token(39);207 jj_consume_token(44);
175 break;
176 default:
177 jj_la1[9] = jj_gen;
178 ;
179 }
180 jj_consume_token(44);
181 {if (true) return ports;}208 {if (true) return ports;}
182 throw new Error("Missing return statement in function");209 throw new Error("Missing return statement in function");
210 } finally {
211 trace_return("parseCompactPorts");
212 }
183 }213 }
184214
185 final public Port parseCompactPort() throws ParseException {215 final public Port parseCompactPort() throws ParseException {
216 trace_call("parseCompactPort");
217 try {
186 Port.Type type;218 Port.Type type;
187 Token nameToken;219 Token nameToken;
188 type = parsePortType();220 type = parsePortType();
189 nameToken = jj_consume_token(NAME);221 nameToken = jj_consume_token(NAME);
190 {if (true) return new Port(nameToken.image, type);}222 {if (true) return new Port(nameToken.image, type);}
191 throw new Error("Missing return statement in function");223 throw new Error("Missing return statement in function");
224 } finally {
225 trace_return("parseCompactPort");
226 }
192 }227 }
193228
194 final public Port.Type parsePortType() throws ParseException {229 final public Port.Type parsePortType() throws ParseException {
195 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {230 trace_call("parsePortType");
196 case INPUT:231 try {
197 jj_consume_token(INPUT);232 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
233 case INPUT:
234 jj_consume_token(INPUT);
198 {if (true) return Port.Type.INPUT;}235 {if (true) return Port.Type.INPUT;}
199 break;236 break;
200 case OUTPUT:237 case OUTPUT:
201 jj_consume_token(OUTPUT);238 jj_consume_token(OUTPUT);
202 {if (true) return Port.Type.OUTPUT;}239 {if (true) return Port.Type.OUTPUT;}
203 break;240 break;
204 default:241 default:
205 jj_la1[10] = jj_gen;242 jj_la1[10] = jj_gen;
206 jj_consume_token(-1);243 jj_consume_token(-1);
207 throw new ParseException();244 throw new ParseException();
245 }
246 throw new Error("Missing return statement in function");
247 } finally {
248 trace_return("parsePortType");
208 }249 }
209 throw new Error("Missing return statement in function");
210 }250 }
211251
212 final public List<Port> parseComplexPorts() throws ParseException {252 final public List<Port> parseComplexPorts() throws ParseException {
253 trace_call("parseComplexPorts");
254 try {
213 List<String> declarations;255 List<String> declarations;
214 List<Port> definitions;256 List<Port> definitions;
215 declarations = parsePortsDeclaration();257 declarations = parsePortsDeclaration();
216 definitions = parsePortsDefinitions();258 definitions = parsePortsDefinitions();
217 HashMap<String, Port.Type> nameToType = new HashMap<String, Port.Type>();259 HashMap<String, Port.Type> nameToType = new HashMap<String, Port.Type>();
218 for (Port port: definitions) {260 for (Port port: definitions) {
219 nameToType.put(port.name, port.type);261 nameToType.put(port.name, port.type);
@@ -225,335 +267,403 @@
225 }267 }
226 {if (true) return ports;}268 {if (true) return ports;}
227 throw new Error("Missing return statement in function");269 throw new Error("Missing return statement in function");
270 } finally {
271 trace_return("parseComplexPorts");
272 }
228 }273 }
229274
230 final public List<String> parsePortsDeclaration() throws ParseException {275 final public List<String> parsePortsDeclaration() throws ParseException {
276 trace_call("parsePortsDeclaration");
277 try {
231 List<String> names = null;278 List<String> names = null;
232 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {279 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
233 case 38:280 case 38:
234 jj_consume_token(38);281 jj_consume_token(38);
235 names = parseNames();282 names = parseNames();
236 jj_consume_token(39);283 jj_consume_token(39);
237 break;284 break;
238 default:285 default:
239 jj_la1[11] = jj_gen;286 jj_la1[11] = jj_gen;
240 ;287 ;
241 }288 }
242 jj_consume_token(44);289 jj_consume_token(44);
243 List<String> ports = new LinkedList<String>();290 List<String> ports = new LinkedList<String>();
244 if (names != null) {291 if (names != null) {
245 ports.addAll(names);292 ports.addAll(names);
246 }293 }
247 {if (true) return ports;}294 {if (true) return ports;}
248 throw new Error("Missing return statement in function");295 throw new Error("Missing return statement in function");
296 } finally {
297 trace_return("parsePortsDeclaration");
298 }
249 }299 }
250300
251 final public List<Port> parsePortsDefinitions() throws ParseException {301 final public List<Port> parsePortsDefinitions() throws ParseException {
302 trace_call("parsePortsDefinitions");
303 try {
252 List<Port> ports;304 List<Port> ports;
253 List<Port> allPorts = new LinkedList<Port>();305 List<Port> allPorts = new LinkedList<Port>();
254 label_4:306 label_4:
255 while (true) {307 while (true) {
256 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {308 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
257 case INPUT:309 case INPUT:
258 case OUTPUT:310 case OUTPUT:
259 case INOUT:311 case INOUT:
260 case REG:312 case REG:
261 case WIRE:313 case WIRE:
262 ;314 ;
263 break;315 break;
264 default:316 default:
265 jj_la1[12] = jj_gen;317 jj_la1[12] = jj_gen;
266 break label_4;318 break label_4;
267 }319 }
268 ports = parsePortsDefinition();320 ports = parsePortsDefinition();
269 if (ports != null) {321 if (ports != null) {
270 allPorts.addAll(ports);322 allPorts.addAll(ports);
271 }323 }
272 }324 }
273 {if (true) return allPorts;}325 {if (true) return allPorts;}
274 throw new Error("Missing return statement in function");326 throw new Error("Missing return statement in function");
327 } finally {
328 trace_return("parsePortsDefinitions");
329 }
275 }330 }
276331
277 final public List<Port> parsePortsDefinition() throws ParseException {332 final public List<Port> parsePortsDefinition() throws ParseException {
333 trace_call("parsePortsDefinition");
334 try {
278 List<String> names;335 List<String> names;
279 Port.Type type;336 Port.Type type;
280 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {337 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
281 case INPUT:338 case INPUT:
282 case OUTPUT:339 case OUTPUT:
283 type = parsePortType();340 type = parsePortType();
284 names = parseNames();341 names = parseNames();
285 jj_consume_token(44);342 jj_consume_token(44);
286 List<Port> ports = new LinkedList<Port>();343 List<Port> ports = new LinkedList<Port>();
287 for (String name: names) {344 for (String name: names) {
288 Port port = new Port(name, type);345 Port port = new Port(name, type);
289 ports.add(port);346 ports.add(port);
290 }347 }
291 {if (true) return ports;}348 {if (true) return ports;}
292 break;
293 case INOUT:
294 case REG:
295 case WIRE:
296 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
297 case WIRE:
298 jj_consume_token(WIRE);
299 break;349 break;
300 case INOUT:350 case INOUT:
301 jj_consume_token(INOUT);
302 break;
303 case REG:351 case REG:
304 jj_consume_token(REG);352 case WIRE:
305 break;353 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
306 default:354 case WIRE:
307 jj_la1[13] = jj_gen;355 jj_consume_token(WIRE);
308 jj_consume_token(-1);356 break;
309 throw new ParseException();357 case INOUT:
310 }358 jj_consume_token(INOUT);
311 parseNames();359 break;
312 jj_consume_token(44);360 case REG:
361 jj_consume_token(REG);
362 break;
363 default:
364 jj_la1[13] = jj_gen;
365 jj_consume_token(-1);
366 throw new ParseException();
367 }
368 parseNames();
369 jj_consume_token(44);
313 {if (true) return null;}370 {if (true) return null;}
314 break;371 break;
315 default:372 default:
316 jj_la1[14] = jj_gen;373 jj_la1[14] = jj_gen;
317 jj_consume_token(-1);374 jj_consume_token(-1);
318 throw new ParseException();375 throw new ParseException();
376 }
377 throw new Error("Missing return statement in function");
378 } finally {
379 trace_return("parsePortsDefinition");
319 }380 }
320 throw new Error("Missing return statement in function");
321 }381 }
322382
323 final public List<String> parseNames() throws ParseException {383 final public List<String> parseNames() throws ParseException {
384 trace_call("parseNames");
385 try {
324 Token nameToken;386 Token nameToken;
325 List<String> names = new LinkedList<String>();387 List<String> names = new LinkedList<String>();
326 label_5:388 label_5:
327 while (true) {389 while (true) {
328 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {390 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
329 case NAME:391 case NAME:
330 ;392 ;
331 break;393 break;
332 default:394 default:
333 jj_la1[15] = jj_gen;395 jj_la1[15] = jj_gen;
334 break label_5;396 break label_5;
335 }397 }
336 nameToken = jj_consume_token(NAME);398 nameToken = jj_consume_token(NAME);
337 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {399 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
338 case 42:400 case 42:
339 jj_consume_token(42);401 jj_consume_token(42);
340 break;402 break;
341 default:403 default:
342 jj_la1[16] = jj_gen;404 jj_la1[16] = jj_gen;
343 ;405 ;
344 }406 }
345 String name = nameToken.image;407 String name = nameToken.image;
346 names.add(name);408 names.add(name);
347 }409 }
348 {if (true) return names;}410 {if (true) return names;}
349 throw new Error("Missing return statement in function");411 throw new Error("Missing return statement in function");
412 } finally {
413 trace_return("parseNames");
414 }
350 }415 }
351416
352 final public Map<String, Boolean> parseInitialState() throws ParseException {417 final public Map<String, Boolean> parseInitialState() throws ParseException {
418 trace_call("parseInitialState");
419 try {
353 Boolean state;420 Boolean state;
354 Token nameToken;421 Token nameToken;
355 Map<String, Boolean> signalStates = new HashMap<String, Boolean>();422 Map<String, Boolean> signalStates = new HashMap<String, Boolean>();
356 label_6:423 label_6:
357 while (true) {424 while (true) {
358 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {425 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
359 case NAME:426 case NAME:
360 case 43:427 case 43:
361 ;428 ;
362 break;429 break;
363 default:430 default:
364 jj_la1[17] = jj_gen;431 jj_la1[17] = jj_gen;
365 break label_6;432 break label_6;
366 }433 }
367 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {434 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
368 case 43:435 case 43:
369 jj_consume_token(43);436 jj_consume_token(43);
370 nameToken = jj_consume_token(NAME);437 nameToken = jj_consume_token(NAME);
371 state = false;438 state = false;
372 break;439 break;
373 case NAME:440 case NAME:
374 nameToken = jj_consume_token(NAME);441 nameToken = jj_consume_token(NAME);
375 state = true;442 state = true;
376 break;443 break;
377 default:444 default:
378 jj_la1[18] = jj_gen;445 jj_la1[18] = jj_gen;
379 jj_consume_token(-1);446 jj_consume_token(-1);
380 throw new ParseException();447 throw new ParseException();
381 }448 }
382 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {449 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
383 case 42:450 case 42:
384 jj_consume_token(42);451 jj_consume_token(42);
385 break;452 break;
386 default:453 default:
387 jj_la1[19] = jj_gen;454 jj_la1[19] = jj_gen;
388 ;455 ;
389 }456 }
390 String name = nameToken.image;457 String name = nameToken.image;
391 signalStates.put(name, state);458 signalStates.put(name, state);
392 }459 }
393 {if (true) return signalStates;}460 {if (true) return signalStates;}
394 throw new Error("Missing return statement in function");461 throw new Error("Missing return statement in function");
462 } finally {
463 trace_return("parseInitialState");
464 }
395 }465 }
396466
397 final public List<Assign> parseAssigns() throws ParseException {467 final public List<Assign> parseAssigns() throws ParseException {
468 trace_call("parseAssigns");
469 try {
398 Assign assign;470 Assign assign;
399 List<Assign> assigns = new LinkedList<Assign>();471 List<Assign> assigns = new LinkedList<Assign>();
400 label_7:472 label_7:
401 while (true) {473 while (true) {
402 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {474 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
403 case ASSIGN:475 case ASSIGN:
404 ;476 ;
405 break;477 break;
406 default:478 default:
407 jj_la1[20] = jj_gen;479 jj_la1[20] = jj_gen;
408 break label_7;480 break label_7;
409 }481 }
410 assign = parseAssign();482 assign = parseAssign();
411 assigns.add(assign);483 assigns.add(assign);
412 }484 }
413 {if (true) return assigns;}485 {if (true) return assigns;}
414 throw new Error("Missing return statement in function");486 throw new Error("Missing return statement in function");
487 } finally {
488 trace_return("parseAssigns");
489 }
415 }490 }
416491
417 final public Assign parseAssign() throws ParseException {492 final public Assign parseAssign() throws ParseException {
493 trace_call("parseAssign");
494 try {
418 Token nameToken;495 Token nameToken;
419 Token formulaToken;496 Token formulaToken;
420 jj_consume_token(ASSIGN);497 jj_consume_token(ASSIGN);
421 nameToken = jj_consume_token(NAME);498 nameToken = jj_consume_token(NAME);
422 formulaToken = jj_consume_token(FORMULA);499 formulaToken = jj_consume_token(FORMULA);
423 String formula = formulaToken.image.replaceAll("^=", "").replaceAll(";$", "");500 String formula = formulaToken.image.replaceAll("^=", "").replaceAll(";$", "");
424 {if (true) return new Assign(nameToken.image, formula);}501 {if (true) return new Assign(nameToken.image, formula);}
425 throw new Error("Missing return statement in function");502 throw new Error("Missing return statement in function");
503 } finally {
504 trace_return("parseAssign");
505 }
426 }506 }
427507
428 final public List<Instance> parseInstances() throws ParseException {508 final public List<Instance> parseInstances() throws ParseException {
509 trace_call("parseInstances");
510 try {
429 Instance instance;511 Instance instance;
430 List<Instance> instances = new LinkedList<Instance>();512 List<Instance> instances = new LinkedList<Instance>();
431 label_8:513 label_8:
432 while (true) {514 while (true) {
433 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {515 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
434 case NAME:516 case NAME:
435 case PETRIFY_NAME:517 case PETRIFY_NAME:
436 case PETRIFY_ZERO_DELAY:518 case PETRIFY_ZERO_DELAY:
437 case MPSAT_ZERO_DELAY:519 case MPSAT_ZERO_DELAY:
438 ;520 ;
439 break;521 break;
440 default:522 default:
441 jj_la1[21] = jj_gen;523 jj_la1[21] = jj_gen;
442 break label_8;524 break label_8;
443 }525 }
444 instance = parseInstance();526 instance = parseInstance();
445 instances.add(instance);527 instances.add(instance);
446 }528 }
447 {if (true) return instances;}529 {if (true) return instances;}
448 throw new Error("Missing return statement in function");530 throw new Error("Missing return statement in function");
531 } finally {
532 trace_return("parseInstances");
533 }
449 }534 }
450535
451 final public Instance parseInstance() throws ParseException {536 final public Instance parseInstance() throws ParseException {
537 trace_call("parseInstance");
538 try {
452 boolean zeroDelay = false;539 boolean zeroDelay = false;
453 String moduleName;540 String moduleName;
454 Token nameToken = null;541 Token nameToken = null;
455 List<String> parameters;542 List<String> parameters;
456 List<Pin> pins;543 List<Pin> pins;
457 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
458 case PETRIFY_ZERO_DELAY:
459 case MPSAT_ZERO_DELAY:
460 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {544 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
461 case PETRIFY_ZERO_DELAY:545 case PETRIFY_ZERO_DELAY:
462 jj_consume_token(PETRIFY_ZERO_DELAY);
463 break;
464 case MPSAT_ZERO_DELAY:546 case MPSAT_ZERO_DELAY:
465 jj_consume_token(MPSAT_ZERO_DELAY);547 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
466 break;548 case PETRIFY_ZERO_DELAY:
467 default:549 jj_consume_token(PETRIFY_ZERO_DELAY);
468 jj_la1[22] = jj_gen;550 break;
469 jj_consume_token(-1);551 case MPSAT_ZERO_DELAY:
470 throw new ParseException();552 jj_consume_token(MPSAT_ZERO_DELAY);
471 }553 break;
554 default:
555 jj_la1[22] = jj_gen;
556 jj_consume_token(-1);
557 throw new ParseException();
558 }
472 zeroDelay = true;559 zeroDelay = true;
473 break;560 break;
474 default:561 default:
475 jj_la1[23] = jj_gen;562 jj_la1[23] = jj_gen;
476 ;563 ;
477 }564 }
478 moduleName = parseModuleName();565 moduleName = parseModuleName();
479 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {566 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
480 case NAME:567 case NAME:
481 nameToken = jj_consume_token(NAME);568 nameToken = jj_consume_token(NAME);
482 break;569 break;
483 default:570 default:
484 jj_la1[24] = jj_gen;571 jj_la1[24] = jj_gen;
485 ;572 ;
486 }573 }
487 jj_consume_token(38);574 jj_consume_token(38);
488 pins = parsePins();575 pins = parsePins();
489 jj_consume_token(39);576 jj_consume_token(39);
490 jj_consume_token(44);577 jj_consume_token(44);
491 String name = (nameToken == null ? null : nameToken.image);578 String name = (nameToken == null ? null : nameToken.image);
492 {if (true) return new Instance(name, moduleName, pins, zeroDelay);}579 {if (true) return new Instance(name, moduleName, pins, zeroDelay);}
493 throw new Error("Missing return statement in function");580 throw new Error("Missing return statement in function");
581 } finally {
582 trace_return("parseInstance");
583 }
494 }584 }
495585
496 final public List<Pin> parsePins() throws ParseException {586 final public List<Pin> parsePins() throws ParseException {
587 trace_call("parsePins");
588 try {
497 List<Pin> pins;589 List<Pin> pins;
498 if (jj_2_2(2147483647)) {590 if (jj_2_2(2147483647)) {
499 pins = parseNamedPins();591 pins = parseNamedPins();
500 } else {592 } else {
501 pins = parseOrderedPins();593 pins = parseOrderedPins();
502 }594 }
503 {if (true) return pins;}595 {if (true) return pins;}
504 throw new Error("Missing return statement in function");596 throw new Error("Missing return statement in function");
597 } finally {
598 trace_return("parsePins");
599 }
505 }600 }
506601
507 final public List<Pin> parseNamedPins() throws ParseException {602 final public List<Pin> parseNamedPins() throws ParseException {
603 trace_call("parseNamedPins");
604 try {
508 Pin pin;605 Pin pin;
509 List<Pin> pins = new LinkedList<Pin>();606 List<Pin> pins = new LinkedList<Pin>();
510 label_9:607 label_9:
511 while (true) {608 while (true) {
512 pin = parseNamedPin();609 pin = parseNamedPin();
513 pins.add(pin);610 pins.add(pin);
514 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {611 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
515 case 45:612 case 45:
516 ;613 ;
517 break;614 break;
518 default:615 default:
519 jj_la1[25] = jj_gen;616 jj_la1[25] = jj_gen;
520 break label_9;617 break label_9;
618 }
521 }619 }
522 }
523 {if (true) return pins;}620 {if (true) return pins;}
524 throw new Error("Missing return statement in function");621 throw new Error("Missing return statement in function");
622 } finally {
623 trace_return("parseNamedPins");
624 }
525 }625 }
526626
527 final public Pin parseNamedPin() throws ParseException {627 final public Pin parseNamedPin() throws ParseException {
628 trace_call("parseNamedPin");
629 try {
528 Token portName;630 Token portName;
529 Token netName;631 Token netName;
530 jj_consume_token(45);632 jj_consume_token(45);
531 portName = jj_consume_token(NAME);633 portName = jj_consume_token(NAME);
532 jj_consume_token(38);634 jj_consume_token(38);
533 netName = jj_consume_token(NAME);635 netName = jj_consume_token(NAME);
534 jj_consume_token(39);636 jj_consume_token(39);
535 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {637 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
536 case 42:638 case 42:
537 jj_consume_token(42);639 jj_consume_token(42);
538 break;640 break;
539 default:641 default:
540 jj_la1[26] = jj_gen;642 jj_la1[26] = jj_gen;
541 ;643 ;
542 }644 }
543 {if (true) return new Pin(portName.image, netName.image);}645 {if (true) return new Pin(portName.image, netName.image);}
544 throw new Error("Missing return statement in function");646 throw new Error("Missing return statement in function");
647 } finally {
648 trace_return("parseNamedPin");
649 }
545 }650 }
546651
547 final public List<Pin> parseOrderedPins() throws ParseException {652 final public List<Pin> parseOrderedPins() throws ParseException {
653 trace_call("parseOrderedPins");
654 try {
548 List<String> wires;655 List<String> wires;
549 List<Pin> pins = new LinkedList<Pin>();656 List<Pin> pins = new LinkedList<Pin>();
550 wires = parseNames();657 wires = parseNames();
551 for (String wire: wires) {658 for (String wire: wires) {
552 Pin pin = new Pin(null, wire);659 Pin pin = new Pin(null, wire);
553 pins.add(pin);660 pins.add(pin);
554 }661 }
555 {if (true) return pins;}662 {if (true) return pins;}
556 throw new Error("Missing return statement in function");663 throw new Error("Missing return statement in function");
664 } finally {
665 trace_return("parseOrderedPins");
666 }
557 }667 }
558668
559 private boolean jj_2_1(int xla) {669 private boolean jj_2_1(int xla) {
@@ -777,6 +887,7 @@
777 }887 }
778 }888 }
779 }889 }
890 trace_token(token, "");
780 return token;891 return token;
781 }892 }
782 token = oldToken;893 token = oldToken;
@@ -814,6 +925,7 @@
814 else token = token.next = token_source.getNextToken();925 else token = token.next = token_source.getNextToken();
815 jj_ntk = -1;926 jj_ntk = -1;
816 jj_gen++;927 jj_gen++;
928 trace_token(token, " (in getNextToken)");
817 return token;929 return token;
818 }930 }
819931
@@ -902,12 +1014,55 @@
902 return new ParseException(token, exptokseq, tokenImage);1014 return new ParseException(token, exptokseq, tokenImage);
903 }1015 }
9041016
905 /** Enable tracing. */1017 private int trace_indent = 0;
1018 private boolean trace_enabled = true;
1019
1020/** Enable tracing. */
906 final public void enable_tracing() {1021 final public void enable_tracing() {
1022 trace_enabled = true;
907 }1023 }
9081024
909 /** Disable tracing. */1025/** Disable tracing. */
910 final public void disable_tracing() {1026 final public void disable_tracing() {
1027 trace_enabled = false;
1028 }
1029
1030 private void trace_call(String s) {
1031 if (trace_enabled) {
1032 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
1033 System.out.println("Call: " + s);
1034 }
1035 trace_indent = trace_indent + 2;
1036 }
1037
1038 private void trace_return(String s) {
1039 trace_indent = trace_indent - 2;
1040 if (trace_enabled) {
1041 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
1042 System.out.println("Return: " + s);
1043 }
1044 }
1045
1046 private void trace_token(Token t, String where) {
1047 if (trace_enabled) {
1048 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
1049 System.out.print("Consumed token: <" + tokenImage[t.kind]);
1050 if (t.kind != 0 && !tokenImage[t.kind].equals("\"" + t.image + "\"")) {
1051 System.out.print(": \"" + t.image + "\"");
1052 }
1053 System.out.println(" at line " + t.beginLine + " column " + t.beginColumn + ">" + where);
1054 }
1055 }
1056
1057 private void trace_scan(Token t1, int t2) {
1058 if (trace_enabled) {
1059 for (int i = 0; i < trace_indent; i++) { System.out.print(" "); }
1060 System.out.print("Visited token: <" + tokenImage[t1.kind]);
1061 if (t1.kind != 0 && !tokenImage[t1.kind].equals("\"" + t1.image + "\"")) {
1062 System.out.print(": \"" + t1.image + "\"");
1063 }
1064 System.out.println(" at line " + t1.beginLine + " column " + t1.beginColumn + ">; Expected token: <" + tokenImage[t2] + ">");
1065 }
911 }1066 }
9121067
913 private void jj_rescan_token() {1068 private void jj_rescan_token() {
9141069
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/VerilogParser.jj'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/VerilogParser.jj 2015-11-03 23:05:25 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/javacc/VerilogParser.jj 2015-11-09 09:38:45 +0000
@@ -6,7 +6,7 @@
6 JDK_VERSION = "1.7";6 JDK_VERSION = "1.7";
7 LOOKAHEAD = 1;7 LOOKAHEAD = 1;
8 STATIC = false;8 STATIC = false;
9 DEBUG_PARSER = false;9 DEBUG_PARSER = true;
10 DEBUG_LOOKAHEAD = false;10 DEBUG_LOOKAHEAD = false;
11 DEBUG_TOKEN_MANAGER = false;11 DEBUG_TOKEN_MANAGER = false;
12}12}
1313
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/serialisation/VerilogSerialiser.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/serialisation/VerilogSerialiser.java 2015-07-30 13:49:01 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/serialisation/VerilogSerialiser.java 2015-11-09 09:38:45 +0000
@@ -21,18 +21,30 @@
2121
22package org.workcraft.plugins.circuit.serialisation;22package org.workcraft.plugins.circuit.serialisation;
2323
24import java.io.File;
25import java.io.FileInputStream;
26import java.io.FileNotFoundException;
27import java.io.InputStream;
24import java.io.OutputStream;28import java.io.OutputStream;
25import java.io.PrintWriter;29import java.io.PrintWriter;
26import java.util.HashMap;30import java.util.HashMap;
31import java.util.HashSet;
32import java.util.List;
27import java.util.UUID;33import java.util.UUID;
2834
35import org.workcraft.Framework;
29import org.workcraft.dom.Model;36import org.workcraft.dom.Model;
30import org.workcraft.dom.hierarchy.NamespaceHelper;37import org.workcraft.dom.hierarchy.NamespaceHelper;
31import org.workcraft.exceptions.ArgumentException;38import org.workcraft.exceptions.ArgumentException;
32import org.workcraft.plugins.circuit.Circuit;39import org.workcraft.plugins.circuit.Circuit;
33import org.workcraft.plugins.circuit.CircuitComponent;40import org.workcraft.plugins.circuit.CircuitSettings;
34import org.workcraft.plugins.circuit.CircuitUtils;41import org.workcraft.plugins.circuit.CircuitUtils;
35import org.workcraft.plugins.circuit.Contact;42import org.workcraft.plugins.circuit.Contact;
43import org.workcraft.plugins.circuit.FunctionComponent;
44import org.workcraft.plugins.circuit.javacc.ParseException;
45import org.workcraft.plugins.circuit.javacc.SubstitutionParser;
46import org.workcraft.plugins.circuit.verilog.SubstitutionRule;
47import org.workcraft.plugins.shared.CommonDebugSettings;
36import org.workcraft.serialisation.Format;48import org.workcraft.serialisation.Format;
37import org.workcraft.serialisation.ModelSerialiser;49import org.workcraft.serialisation.ModelSerialiser;
38import org.workcraft.serialisation.ReferenceProducer;50import org.workcraft.serialisation.ReferenceProducer;
@@ -45,7 +57,7 @@
45 private static final String KEYWORD_INPUT = "input";57 private static final String KEYWORD_INPUT = "input";
46 private static final String KEYWORD_MODULE = "module ";58 private static final String KEYWORD_MODULE = "module ";
47 private static final String KEYWORD_ENDMODULE = "endmodule";59 private static final String KEYWORD_ENDMODULE = "endmodule";
4860
49 class ReferenceResolver implements ReferenceProducer {61 class ReferenceResolver implements ReferenceProducer {
50 HashMap<Object, String> refMap = new HashMap<Object, String>();62 HashMap<Object, String> refMap = new HashMap<Object, String>();
51 63
@@ -94,6 +106,7 @@
94 private void writeCircuit(PrintWriter out, Circuit circuit) {106 private void writeCircuit(PrintWriter out, Circuit circuit) {
95 writeHeader(out, circuit);107 writeHeader(out, circuit);
96 writeInstances(out, circuit);108 writeInstances(out, circuit);
109 writeInitialState(out, circuit);
97 out.println(KEYWORD_ENDMODULE);110 out.println(KEYWORD_ENDMODULE);
98 }111 }
99 112
@@ -130,7 +143,8 @@
130 }143 }
131 144
132 private void writeInstances(PrintWriter out, Circuit circuit) {145 private void writeInstances(PrintWriter out, Circuit circuit) {
133 for (CircuitComponent component: Hierarchy.getDescendantsOfType(circuit.getRoot(), CircuitComponent.class)) {146 HashMap<String, SubstitutionRule> substitutionRules = readSubsritutionRules();
147 for (FunctionComponent component: Hierarchy.getDescendantsOfType(circuit.getRoot(), FunctionComponent.class)) {
134 String moduleName = component.getModule();148 String moduleName = component.getModule();
135 String instanceRef = circuit.getNodeReference(component);149 String instanceRef = circuit.getNodeReference(component);
136 String instanceFlatName = NamespaceHelper.hierarchicalToFlatName(instanceRef);150 String instanceFlatName = NamespaceHelper.hierarchicalToFlatName(instanceRef);
@@ -138,6 +152,17 @@
138 System.out.println(" Warning: component '" + instanceFlatName + "' is not associated to a module.");152 System.out.println(" Warning: component '" + instanceFlatName + "' is not associated to a module.");
139 moduleName = "";153 moduleName = "";
140 }154 }
155 SubstitutionRule substitutionRule = substitutionRules.get(moduleName);
156 if (substitutionRule != null) {
157 String newModuleName = substitutionRule.newName;
158 if (newModuleName != null) {
159 System.out.println("Info: in component '" + instanceFlatName + "' renaming module '" + moduleName + "' to '" + newModuleName + "'.");
160 moduleName = newModuleName;
161 }
162 }
163 if (component.getIsZeroDelay() && (component.isBuffer() || component.isInverter())) {
164 out.println(" // This inverter should have a short delay");
165 }
141 out.print(" " + moduleName + " " + instanceFlatName + " (");166 out.print(" " + moduleName + " " + instanceFlatName + " (");
142 boolean first = true;167 boolean first = true;
143 for (Contact contact: component.getContacts()) {168 for (Contact contact: component.getContacts()) {
@@ -149,13 +174,77 @@
149 String contactName = contact.getName();174 String contactName = contact.getName();
150 String wireName = CircuitUtils.getWireName(circuit, contact);175 String wireName = CircuitUtils.getWireName(circuit, contact);
151 if ((wireName == null) || wireName.isEmpty()) {176 if ((wireName == null) || wireName.isEmpty()) {
152 System.out.println(" Warning: contact '" + contactName + "' of component '"+ instanceFlatName + "' is disconnected.");177 System.out.println(" Warning: in component '" + instanceFlatName + "' contact '" + contactName + "' is disconnected.");
153 wireName = "";178 wireName = "";
154 }179 }
180 if (substitutionRule != null) {
181 String newContactName = substitutionRule.substitutions.get(contactName);
182 if (newContactName != null) {
183 System.out.println("Info: in component '" + instanceFlatName + "' renaming contact '" + contactName + "' to '" + newContactName + "'.");
184 contactName = newContactName;
185 }
186 }
155 out.print("." + contactName + "(" + wireName + ")");187 out.print("." + contactName + "(" + wireName + ")");
156 }188 }
157 out.print(");\n");189 out.print(");\n");
158 }190 }
159 }191 }
160192
193 private HashMap<String, SubstitutionRule> readSubsritutionRules() {
194 HashMap<String, SubstitutionRule> result = new HashMap<>();
195 String substitutionsFileName = CircuitSettings.getSubstitutionLibrary();
196 if ((substitutionsFileName == null) || substitutionsFileName.isEmpty()) {
197 System.out.println("Warning: file of substitutions is not specified.");
198 } else {
199 File libraryFile = new File(substitutionsFileName);
200 final Framework framework = Framework.getInstance();
201 if (framework.checkFile(libraryFile, "Access error for the file of substitutions")) {
202 try {
203 InputStream genlibInputStream = new FileInputStream(substitutionsFileName);
204 SubstitutionParser substitutionParser = new SubstitutionParser(genlibInputStream);
205 if (CommonDebugSettings.getParserTracing()) {
206 substitutionParser.enable_tracing();
207 } else {
208 substitutionParser.disable_tracing();
209 }
210 List<SubstitutionRule> rules = substitutionParser.parseSubstitutionRules();
211 for (SubstitutionRule rule: rules) {
212 result.put(rule.oldName, rule);
213 }
214 System.out.println("Info: renaming gates and pins using the file of substitutions '" + substitutionsFileName + "'.");
215 } catch (FileNotFoundException e) {
216 } catch (ParseException e) {
217 System.out.println("Warning: could not parse the file of substitutions '" + substitutionsFileName + "'.");
218 }
219 }
220 }
221 return result;
222 }
223
224 private void writeInitialState(PrintWriter out, Circuit circuit) {
225 HashSet<Contact> contacts = new HashSet<>();
226 for (Contact contact: Hierarchy.getDescendantsOfType(circuit.getRoot(), Contact.class, new Func<Contact, Boolean>() {
227 @Override
228 public Boolean eval(Contact arg) {
229 return (arg.isPort() != arg.isOutput());
230 }
231 })) {
232 contacts.add(contact);
233 }
234 out.println();
235 out.println(" // signal values at the initial state:");
236 out.print(" //");
237 for (Contact contact: contacts) {
238 String wireName = CircuitUtils.getWireName(circuit, contact);
239 if ((wireName != null) && !wireName.isEmpty()) {
240 out.print(" ");
241 if ( !contact.getInitToOne() ) {
242 out.print("!");
243 }
244 out.print(wireName);
245 }
246 }
247 out.println();
248 }
249
161}250}
162251
=== modified file 'CircuitPlugin/src/org/workcraft/plugins/circuit/stg/CircuitToStgConverter.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/stg/CircuitToStgConverter.java 2015-11-02 12:32:29 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/stg/CircuitToStgConverter.java 2015-11-09 09:38:45 +0000
@@ -212,7 +212,7 @@
212 private TwoWayMap<VisualContact, SignalStg> convertDriversToStgs(HashSet<VisualContact> drivers) {212 private TwoWayMap<VisualContact, SignalStg> convertDriversToStgs(HashSet<VisualContact> drivers) {
213 TwoWayMap<VisualContact, SignalStg> result = new TwoWayMap<>();213 TwoWayMap<VisualContact, SignalStg> result = new TwoWayMap<>();
214 for (VisualContact driver: drivers) {214 for (VisualContact driver: drivers) {
215 VisualContact signal = CircuitUtils.findSignal(circuit, driver); 215 VisualContact signal = CircuitUtils.findSignal(circuit, driver, true);
216 Container container = getContainer(signal);216 Container container = getContainer(signal);
217 String signalName = CircuitUtils.getSignalName(circuit, signal);217 String signalName = CircuitUtils.getSignalName(circuit, signal);
218218
@@ -276,7 +276,7 @@
276 276
277 clauses.addAll(dnf.getClauses());277 clauses.addAll(dnf.getClauses());
278278
279 VisualContact signal = CircuitUtils.findSignal(circuit, driver); 279 VisualContact signal = CircuitUtils.findSignal(circuit, driver, true);
280 Container container = getContainer(signal);280 Container container = getContainer(signal);
281 String signalName = CircuitUtils.getSignalName(circuit, signal);281 String signalName = CircuitUtils.getSignalName(circuit, signal);
282 SignalTransition.Type signalType = CircuitUtils.getSignalType(circuit, signal);282 SignalTransition.Type signalType = CircuitUtils.getSignalType(circuit, signal);
@@ -459,7 +459,7 @@
459 for (VisualContact driver: drivers) {459 for (VisualContact driver: drivers) {
460 SignalStg signalStg = driverToStgMap.getValue(driver);460 SignalStg signalStg = driverToStgMap.getValue(driver);
461 if (signalStg != null) {461 if (signalStg != null) {
462 VisualContact signal = CircuitUtils.findSignal(circuit, driver); 462 VisualContact signal = CircuitUtils.findSignal(circuit, driver, true);
463 Point2D centerPosition = getPosition(signal);463 Point2D centerPosition = getPosition(signal);
464 setPosition(signalStg.zero, Geometry.add(centerPosition, OFFSET_P0));464 setPosition(signalStg.zero, Geometry.add(centerPosition, OFFSET_P0));
465 setPosition(signalStg.one, Geometry.add(centerPosition, OFFSET_P1));465 setPosition(signalStg.one, Geometry.add(centerPosition, OFFSET_P1));
466466
=== added file 'CircuitPlugin/src/org/workcraft/plugins/circuit/verilog/SubstitutionRule.java'
--- CircuitPlugin/src/org/workcraft/plugins/circuit/verilog/SubstitutionRule.java 1970-01-01 00:00:00 +0000
+++ CircuitPlugin/src/org/workcraft/plugins/circuit/verilog/SubstitutionRule.java 2015-11-09 09:38:45 +0000
@@ -0,0 +1,16 @@
1package org.workcraft.plugins.circuit.verilog;
2
3import java.util.Map;
4
5public class SubstitutionRule {
6 public final String oldName;
7 public final String newName;
8 public final Map<String, String> substitutions;
9
10 public SubstitutionRule(String oldName, String newName, Map<String, String> substitutions) {
11 this.oldName = oldName;
12 this.newName = newName;
13 this.substitutions = substitutions;
14 }
15
16}
017
=== modified file 'WorkcraftCore/src/org/workcraft/plugins/shared/CommonDebugSettings.java'
--- WorkcraftCore/src/org/workcraft/plugins/shared/CommonDebugSettings.java 2015-10-13 17:22:00 +0000
+++ WorkcraftCore/src/org/workcraft/plugins/shared/CommonDebugSettings.java 2015-11-09 09:38:45 +0000
@@ -35,14 +35,17 @@
35 private static final String keyCopyModelOnChange = prefix + ".copyModelOnChange";35 private static final String keyCopyModelOnChange = prefix + ".copyModelOnChange";
36 private static final String keyKeepTemporaryFiles = prefix + ".keepTemporaryFiles";36 private static final String keyKeepTemporaryFiles = prefix + ".keepTemporaryFiles";
37 private static final String keyVerboseImport = prefix + ".verboseImport";37 private static final String keyVerboseImport = prefix + ".verboseImport";
38 private static final String keyParserTracing = prefix + ".parserTracing";
3839
39 private static final boolean defaultCopyModelOnChange = false; 40 private static final boolean defaultCopyModelOnChange = false;
40 private static final Boolean defaultKeepTemporaryFiles = true;41 private static final Boolean defaultKeepTemporaryFiles = true;
41 private static final Boolean defaultVerboseImport = false;42 private static final Boolean defaultVerboseImport = false;
43 private static final Boolean defaultParserTracing = false;
4244
43 private static boolean copyModelOnChange = defaultCopyModelOnChange; 45 private static boolean copyModelOnChange = defaultCopyModelOnChange;
44 private static Boolean keepTemporaryFiles = defaultKeepTemporaryFiles;46 private static Boolean keepTemporaryFiles = defaultKeepTemporaryFiles;
45 private static Boolean verboseImport = defaultVerboseImport;47 private static Boolean verboseImport = defaultVerboseImport;
48 private static Boolean parserTracing = defaultParserTracing;
4649
47 public CommonDebugSettings() {50 public CommonDebugSettings() {
48 properties.add(new PropertyDeclaration<CommonDebugSettings, Boolean>(51 properties.add(new PropertyDeclaration<CommonDebugSettings, Boolean>(
@@ -74,6 +77,16 @@
74 return getVerboseImport();77 return getVerboseImport();
75 }78 }
76 });79 });
80
81 properties.add(new PropertyDeclaration<CommonDebugSettings, Boolean>(
82 this, "Log tracing information from parsers", Boolean.class, true, false, false) {
83 protected void setter(CommonDebugSettings object, Boolean value) {
84 setParserTracing(value);
85 }
86 protected Boolean getter(CommonDebugSettings object) {
87 return getParserTracing();
88 }
89 });
77 }90 }
78 91
79 @Override92 @Override
@@ -86,6 +99,7 @@
86 setCopyModelOnChange(config.getBoolean(keyCopyModelOnChange, defaultCopyModelOnChange));99 setCopyModelOnChange(config.getBoolean(keyCopyModelOnChange, defaultCopyModelOnChange));
87 setKeepTemporaryFiles(config.getBoolean(keyKeepTemporaryFiles, defaultKeepTemporaryFiles));100 setKeepTemporaryFiles(config.getBoolean(keyKeepTemporaryFiles, defaultKeepTemporaryFiles));
88 setVerboseImport(config.getBoolean(keyVerboseImport, defaultVerboseImport));101 setVerboseImport(config.getBoolean(keyVerboseImport, defaultVerboseImport));
102 setParserTracing(config.getBoolean(keyParserTracing, defaultParserTracing));
89 }103 }
90104
91 @Override105 @Override
@@ -93,6 +107,7 @@
93 config.setBoolean(keyCopyModelOnChange, getCopyModelOnChange());107 config.setBoolean(keyCopyModelOnChange, getCopyModelOnChange());
94 config.setBoolean(keyKeepTemporaryFiles, getKeepTemporaryFiles());108 config.setBoolean(keyKeepTemporaryFiles, getKeepTemporaryFiles());
95 config.setBoolean(keyVerboseImport, getVerboseImport());109 config.setBoolean(keyVerboseImport, getVerboseImport());
110 config.setBoolean(keyParserTracing, getParserTracing());
96 }111 }
97112
98 @Override113 @Override
@@ -128,5 +143,13 @@
128 public static void setVerboseImport(Boolean value) {143 public static void setVerboseImport(Boolean value) {
129 verboseImport = value;144 verboseImport = value;
130 }145 }
146
147 public static Boolean getParserTracing() {
148 return parserTracing;
149 }
150
151 public static void setParserTracing(Boolean value) {
152 parserTracing = value;
153 }
131154
132}155}

Subscribers

People subscribed via source and target branches