) (temp = UnaryExpression (parse_only) )) {
659 | if(parse_only){
660 | tempTI = (TypeInfo)temp;
661 | rvalTI = (TypeInfo)rval;
662 |
663 | TypeInfo rv = new TypeInfo();
664 | rv.setType(Constants.TYPE_INT);
665 | rv.setText(rvalTI.getText() + " " + t.image + " " + tempTI.getText());
666 |
667 | if(rvalTI.getType() != Constants.TYPE_INT) {
668 | throw new ParseException("Integer type expected: " + rvalTI.getText()
669 | + "\n" + " in expression: " + rv.getText());
670 | }
671 | else if(tempTI.getType() != Constants.TYPE_INT) {
672 | throw new ParseException("Integer type expected: " + tempTI.getText()
673 | + "\n" + " in expression: " + rv.getText());
674 | }
675 | rval = rv;
676 | } else {
677 | rval = new Integer(((Integer) rval).intValue() / ((Integer) temp).intValue ());
678 | }
679 | }
680 | |
681 | ((t=
) (temp = UnaryExpression (parse_only) )) {
682 | if(parse_only){
683 | tempTI = (TypeInfo)temp;
684 | rvalTI = (TypeInfo)rval;
685 |
686 | TypeInfo rv = new TypeInfo();
687 | rv.setType(Constants.TYPE_INT);
688 | rv.setText(rvalTI.getText() + " " + t.image + " " + tempTI.getText());
689 |
690 | if(rvalTI.getType() != Constants.TYPE_INT) {
691 | throw new ParseException("Integer type expected: " + rvalTI.getText()
692 | + "\n" + " in expression: " + rv.getText());
693 |
694 | }
695 | else if(tempTI.getType() != Constants.TYPE_INT) {
696 | throw new ParseException("Integer type expected: " + tempTI.getText()
697 | + "\n" + " in expression: " + rv.getText());
698 | }
699 | rval = rv;
700 | } else {
701 | rval = new Integer(((Integer) rval).intValue() % ((Integer) temp).intValue ());
702 | }
703 | }
704 | )*
705 | { return rval; }
706 | }
707 |
708 | Object UnaryExpression (boolean parse_only) :
709 | {
710 | Token t = null;
711 | Token tt = null;
712 | Object temp;
713 | Object rval = null;
714 | }
715 | {
716 | ((t=) {
717 | if(parse_only) {
718 | TypeInfo rv = new TypeInfo();
719 | rv.setType(Constants.TYPE_INT);
720 | rv.setText(t.image);
721 | rval = rv;
722 | } else {
723 | int val = Integer.parseInt (t.image);
724 | rval = new Integer (val);
725 | }
726 | }
727 | |
728 | (t=) {
729 | if(parse_only) {
730 | TypeInfo rv = new TypeInfo();
731 | rv.setType(Constants.TYPE_STRING);
732 | rv.setText(t.image);
733 | rval = rv;
734 | } else {
735 | // strip the quotes
736 | rval = t.image.substring(1, t.image.length()-1).trim();
737 | }
738 | }
739 | |
740 | (t=) {
741 | if(parse_only){
742 | TypeInfo rv = new TypeInfo();
743 | rv.setType(Constants.TYPE_BOOL);
744 | rv.setText(t.image);
745 | rval = rv;
746 | } else {
747 | rval = Boolean.TRUE;
748 | }
749 | }
750 | |
751 | (t=) {
752 | if(parse_only){
753 | TypeInfo rv = new TypeInfo();
754 | rv.setType(Constants.TYPE_BOOL);
755 | rv.setText(t.image);
756 | rval = rv;
757 | } else {
758 | rval = Boolean.FALSE;
759 | }
760 | }
761 | |
762 | (t=) {
763 | if(parse_only){
764 | Parameter param = (Parameter) lookup(t.image);
765 | if (param == null) {
766 | throw new ParseException("Unrecognized parameter: " + t.image
767 | + "\nIf this is a param value (i.e., not a param name), it needs to be quoted.");
768 | } else {
769 | // TODO:Enum needs to be converted to string.
770 | TypeInfo rv = new TypeInfo();
771 | rv.setType (param.getParamType ());
772 | rv.setText (t.image);
773 | rval = rv;
774 |
775 | // add this valid parameter into usedParam list
776 | usedParams.add (param);
777 | }
778 | } else {
779 | // look up the value of a variable
780 | rval = lookup (t.image);
781 | if (rval == null) {
782 | throw new ParseException ("Unrecognized parameter: " + t.image
783 | + "\nIf this is a param value (i.e., not a param name), it needs to be quoted.");
784 | }
785 | }
786 | }
787 | | (t=) (temp = UnaryExpression (parse_only)) {
788 | if(parse_only) {
789 | TypeInfo ti = (TypeInfo) temp;
790 | if (ti.getType() != Constants.TYPE_BOOL) {
791 | throw new ParseException ("Boolean type expected: " + ti.getText()
792 | + "\n" + " in expression: " + t.image + " " + ti.getText());
793 | }
794 | TypeInfo rv = new TypeInfo();
795 | rv.setType(Constants.TYPE_BOOL);
796 | rv.setText(t.image + " " + ti.getText());
797 | rval = rv;
798 | } else {
799 | rval = new Boolean(
800 | !((Boolean) temp).booleanValue ()
801 | );
802 | }
803 | }
804 | | (t=) (rval = LogicalExpression (parse_only)) (tt=) {
805 | if(parse_only) {
806 | TypeInfo rvalTI = (TypeInfo) rval;
807 | TypeInfo ti = new TypeInfo ();
808 | ti.setType (rvalTI.getType());
809 | ti.setText (t.image + rvalTI.getText() + tt.image);
810 | rval = ti;
811 | }
812 | })
813 | {
814 | return rval;
815 | }
816 |
817 | }
818 |
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/Images/._nistLogo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/usnistgov/combinatorial-testing-tools/07b9c57e26410ea85903bb577c5d26a1173fb97e/CCM Command Line Tool/CCMCL/src/Images/._nistLogo.jpg
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/Images/._print.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/usnistgov/combinatorial-testing-tools/07b9c57e26410ea85903bb577c5d26a1173fb97e/CCM Command Line Tool/CCMCL/src/Images/._print.gif
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/Images/nistLogo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/usnistgov/combinatorial-testing-tools/07b9c57e26410ea85903bb577c5d26a1173fb97e/CCM Command Line Tool/CCMCL/src/Images/nistLogo.jpg
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/Images/print.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/usnistgov/combinatorial-testing-tools/07b9c57e26410ea85903bb577c5d26a1173fb97e/CCM Command Line Tool/CCMCL/src/Images/print.gif
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/com/nist/ccmcl/CSolver.java:
--------------------------------------------------------------------------------
1 | package com.nist.ccmcl;
2 |
3 | import choco.cp.model.CPModel;
4 | import choco.cp.solver.CPSolver;
5 | import choco.cp.solver.search.integer.valselector.RandomIntValSelector;
6 | import choco.kernel.model.variables.integer.IntegerVariable;
7 | import choco.kernel.solver.Configuration;
8 | import choco.kernel.solver.search.ISolutionPool;
9 |
10 | import javax.swing.*;
11 | import java.io.BufferedWriter;
12 | import java.io.File;
13 | import java.io.FileWriter;
14 | import java.io.IOException;
15 | import java.util.*;
16 |
17 | public class CSolver
18 | {
19 |
20 |
21 | ArrayList chocoVariables;
22 | ArrayList paraNames;
23 | List lp;
24 | List lc;
25 | CPModel m;
26 | ArrayList enumList;
27 | LinkedHashMap parameters;
28 | ISolutionPool solutions;
29 | String[][] solutionMa;
30 |
31 | int[][] resultIndex;
32 | String[][] resultmapped;
33 | String[] _infile;
34 | int _countRandomTests = 0;
35 | JFrame parentFrame = null;
36 |
37 | public CSolver() //constructor, initialize arrays for parameters and constraints
38 | {
39 |
40 | lp = new ArrayList();
41 | lc = new ArrayList();
42 | }
43 |
44 | //set list of parameters
45 | public void SetParameter(List l)
46 | {
47 | lp = l;
48 | }
49 |
50 | public int NoRandomTests()
51 | {
52 | return _countRandomTests;
53 | }
54 |
55 | //set list of constraints
56 | public void SetConstraints(List l)
57 | {
58 | lc = l;
59 | }
60 |
61 | public void setFrame(JFrame f)
62 | {
63 | parentFrame = f;
64 | }
65 |
66 | public String[] infile()
67 | {
68 | return _infile;
69 | }
70 |
71 | //get solution by indexes
72 | public int[][] getSolutionIndex()
73 | {
74 | return resultIndex;
75 | }
76 |
77 | //get solution mapped
78 | public String[][] getSolutionMapped()
79 | {
80 | return resultmapped;
81 | }
82 |
83 |
84 | private void CreateCombinationsVariables(List listParams)
85 | {
86 | java.util.LinkedHashMap rvalue = new LinkedHashMap();
87 | LinkedHashSet strings = new LinkedHashSet();
88 | parameters = new LinkedHashMap();
89 |
90 | chocoVariables = new ArrayList(lp.size());
91 | paraNames = new ArrayList(lp.size());
92 |
93 |
94 | for (Parameter p : lp)
95 | {
96 | if (p.getType() == Parameter.PARAM_TYPE_ENUM)//get all enum values from each parameter in a single list
97 | {
98 | strings.addAll(p.getValues());
99 |
100 | }
101 | parameters.put(p.getName(), p); //add all parameters
102 |
103 | }
104 |
105 | enumList = new ArrayList(strings);
106 | Collections.sort(enumList);
107 |
108 |
109 | //load parameters
110 |
111 | for (String[] parm : listParams)
112 | {
113 |
114 | Parameter p = (Parameter) parameters.get(parm[0]);
115 |
116 | rvalue.put(p.getName(), p);
117 | paraNames.add(p.getName());// create a list with parameters name
118 |
119 | ArrayList values = new ArrayList();
120 |
121 |
122 | // add in the single arrayList, values, all the values from each parameter
123 | if (p.getType() == Parameter.PARAM_TYPE_INT)// for int type is the same value
124 | {
125 | if (!parm[1].equals(""))
126 | {
127 | values.add(Integer.parseInt(parm[1]));
128 | } else
129 | {
130 | for (String v : p.getValues())
131 | {
132 | values.add(new java.lang.Integer(v));
133 | }
134 |
135 | }
136 |
137 | if (!values.isEmpty())
138 | {
139 | chocoVariables.add(new ChocoVariable(p, values));
140 | }
141 | } else if (p.getType() == Parameter.PARAM_TYPE_BOOL) // for bool type, true=1 and false=0
142 | {
143 | if (!parm[1].equals(""))
144 | {
145 | if (parm[1].toLowerCase().equals("true"))
146 | {
147 | values.add(new java.lang.Integer(1));
148 | } else
149 | {
150 | values.add(new java.lang.Integer(0));
151 | }
152 | } else
153 | {
154 | values.add(new java.lang.Integer(1));
155 | values.add(new java.lang.Integer(0));
156 |
157 | }
158 | if (!values.isEmpty())
159 | {
160 | chocoVariables.add(new ChocoVariable(p, values));
161 | }
162 | } else if (p.getType()
163 | ==
164 | Parameter.PARAM_TYPE_ENUM) //for enum type is the index from the general list of enum values created above
165 | {
166 | if (!parm[1].equals(""))
167 | {
168 | values.add(enumList.indexOf(parm[1]));
169 | } else
170 | {
171 | for (String v : p.getValues())
172 | {
173 | values.add(new java.lang.Integer(enumList.indexOf(v)));
174 | }
175 | }
176 | if (!values.isEmpty())
177 | {
178 | chocoVariables.add(
179 | new ChocoVariable(
180 | p, values
181 | )
182 | );//add to the chocoVariable list all parameters with their values
183 | }
184 | }
185 | }
186 |
187 |
188 | //add all variables to the choco model
189 | for (ChocoVariable c : chocoVariables)
190 | {
191 | m.addVariable(c.getVar());
192 |
193 | }
194 |
195 | }
196 |
197 | //create variables for choco model with parameters
198 | public void CreateVariables()
199 | {
200 |
201 | java.util.LinkedHashMap rvalue = new LinkedHashMap();
202 | LinkedHashSet strings = new LinkedHashSet();
203 | parameters = new LinkedHashMap();
204 |
205 | chocoVariables = new ArrayList(lp.size());
206 | paraNames = new ArrayList(lp.size());
207 |
208 |
209 | for (Parameter p : lp)
210 | {
211 |
212 | if (p.getType() == Parameter.PARAM_TYPE_ENUM)//get all enum values from each parameter in a single list
213 | {
214 | strings.addAll(p.getValues());
215 |
216 | }
217 | parameters.put(p.getName(), p); //add all parameters
218 |
219 | }
220 |
221 |
222 | enumList = new ArrayList(strings);
223 | Collections.sort(enumList);
224 |
225 | //load parameters
226 | for (Parameter p : lp)
227 | {
228 |
229 | rvalue.put(p.getName(), p);
230 | paraNames.add(p.getName());// create a list with parameters name
231 |
232 | ArrayList values = new ArrayList();
233 |
234 | // add in the single arrayList, values, all the values from each parameter
235 | if (p.getType() == Parameter.PARAM_TYPE_INT)// for int type is the same value
236 | {
237 |
238 |
239 | for (String v : p.getValues())
240 | {
241 | values.add(new java.lang.Integer(v.trim()));
242 | }
243 |
244 | chocoVariables.add(new ChocoVariable(p, values));
245 | } else if (p.getType() == Parameter.PARAM_TYPE_BOOL) // for bool type, true=1 and false=0
246 | {
247 | values.add(new java.lang.Integer(1));
248 | values.add(new java.lang.Integer(0));
249 | chocoVariables.add(new ChocoVariable(p, values));
250 | } else if (p.getType()
251 | ==
252 | Parameter.PARAM_TYPE_ENUM) //for enum type is the index from the general list of enum values created above
253 | {
254 |
255 |
256 | for (String v : p.getValues())
257 | {
258 | values.add(new java.lang.Integer(enumList.indexOf(v)));
259 | }
260 |
261 |
262 | chocoVariables.add(
263 | new ChocoVariable(
264 | p, values
265 | )
266 | );//add to the chocoVariable list all parameters with their values
267 | }
268 | }
269 |
270 |
271 | //add all variables to the choco model
272 | for (ChocoVariable c : chocoVariables)
273 | {
274 | m.addVariable(c.getVar());
275 |
276 | }
277 |
278 | }
279 |
280 |
281 | //create constraints for random tests
282 | public void CreateConstraintsForRandomTests()
283 | {
284 | //CONSTRAINT
285 | java.util.ArrayList p = new java.util.ArrayList();
286 | java.util.ArrayList stringConstList = new ArrayList();
287 |
288 | for (meConstraint i : lc)
289 | {
290 | stringConstList.add(i.get_cons()); //add all constraints to single ArrayList
291 |
292 |
293 | java.util.LinkedHashSet varInUse;
294 |
295 | varInUse = new java.util.LinkedHashSet();
296 |
297 | choco.kernel.model.constraints.Constraint c = null;
298 |
299 | //create parser object
300 | ConstraintChocoParser parser = new ConstraintChocoParser(
301 | i.get_cons(), parameters, new Constants(
302 | enumList,
303 | varInUse,
304 | chocoVariables
305 | )
306 | );
307 | varInUse.clear();
308 | try
309 | {
310 | //change constraint to valid format constraint for choco
311 | c = parser.parse();
312 |
313 | }
314 | catch (ParseException e)
315 | {
316 | //throw e;
317 | }
318 | if (c == null)
319 | {
320 |
321 |
322 | throw new Error();
323 |
324 | }
325 |
326 | m.addConstraint(c); //add constraint to model
327 | }
328 | }
329 |
330 | //create choco constraints for invalid combinations
331 |
332 | public void CreateConstraints(meConstraint cons)
333 | {
334 | //CONSTRAINT
335 | java.util.ArrayList p = new java.util.ArrayList();
336 | java.util.ArrayList stringConstList = new ArrayList();
337 |
338 | //for (meConstraint i : lc)
339 | //{
340 | // stringConstList.add(i.get_cons()); //add all constraints to single ArrayList
341 |
342 |
343 | java.util.LinkedHashSet varInUse;
344 |
345 | varInUse = new java.util.LinkedHashSet();
346 |
347 | choco.kernel.model.constraints.Constraint c = null;
348 |
349 | //create parser object
350 | ConstraintChocoParser parser = new ConstraintChocoParser(
351 | cons.get_cons(), parameters, new Constants(
352 | enumList,
353 | varInUse,
354 | chocoVariables
355 | )
356 | );
357 | varInUse.clear();
358 | try
359 | {
360 | //change constraint to valid format constraint for choco
361 | c = parser.parse();
362 | //obtain all the invalid combinations -> not constraints
363 | // c = choco.Choco.not(c);
364 | }
365 | catch (ParseException e)
366 | {
367 | //throw e;
368 | }
369 | if (c == null)
370 | {
371 |
372 |
373 | throw new Error();
374 |
375 | }
376 |
377 | m.addConstraint(c); //add constraint to model
378 |
379 | //}
380 |
381 | }
382 |
383 |
384 | public void SolverRandomTests(int NoSolutions, BufferedWriter bw)
385 | {
386 | try
387 | {
388 | ArrayList> solution = new ArrayList>();
389 | String paramnames = "";
390 | for (int i = 0; i < Main.parameters.size(); i++)
391 | {
392 | paramnames += Main.parameters.get(i).getName() + ",";
393 | }
394 | paramnames = paramnames.substring(0, paramnames.lastIndexOf(","));
395 | bw.write(paramnames);
396 | bw.newLine();
397 | m = new CPModel();
398 |
399 | CreateVariables();//crate variable for the model
400 |
401 | CreateConstraintsForRandomTests(); //create chco constraint
402 |
403 | CPSolver s = new CPSolver(); //create object solver
404 |
405 | s.read(m); //read model (contains variables and constraints)
406 | s.getConfiguration().putInt(Configuration.SOLUTION_POOL_CAPACITY, 1);
407 | s.setValIntSelector(new RandomIntValSelector());
408 | s.setRandomSelectors();
409 |
410 | int rootworld = s.getEnvironment().getWorldIndex();
411 | s.worldPush();
412 |
413 | s.solve();
414 | int count = 0;
415 |
416 | ISolutionPool pool = s.getSearchStrategy().getSolutionPool();
417 |
418 |
419 | ArrayList t = new ArrayList();
420 | int value;
421 |
422 | IntegerVariable var;
423 |
424 |
425 | String line = "";
426 | Object[] x;
427 |
428 | _infile = new String[NoSolutions];
429 |
430 |
431 | // for (Solution sol:pool.asList())
432 | //{
433 | // t.clear();
434 |
435 | do
436 | {
437 | // s.worldPopUntil(rootworld); // restore the original state, where domains were as declared (not yet instantiated)
438 | //s.worldPush(); // backup the current state of the solver, to allow other solution restoration
439 | //s.restoreSolution(sol); // restore the solution
440 |
441 | count = 0;
442 | while (count < parameters.size())
443 | {
444 | var = m.getIntVar(count++);
445 | value = s.getVar(var).getVal();
446 | line = line + value + ",";
447 | }
448 |
449 | while (line.endsWith(","))
450 | {
451 | line = line.substring(0, line.length() - 1);
452 | }
453 | x = line.split(",");
454 | Parameter p;
455 | line = "";
456 |
457 | for (int j = 0; j < x.length; j++)
458 | {
459 | p = lp.get(j);
460 | if (p.getType() == Parameter.PARAM_TYPE_ENUM)
461 | {
462 | line = line + enumList.get(Integer.parseInt((String) x[j])).toString() + ",";
463 | }
464 |
465 | if (p.getType() == Parameter.PARAM_TYPE_BOOL)
466 | {
467 | line = line
468 | + (x[j].equals("0") ? Boolean.toString(false).toUpperCase() : Boolean.toString(true)
469 | .toUpperCase())
470 | + ",";
471 | }
472 |
473 | if (p.getType() == Parameter.PARAM_TYPE_INT)
474 | {
475 | line = line + x[j] + ",";
476 | }
477 |
478 | }
479 |
480 |
481 | while (line.endsWith(","))
482 | {
483 | line = line.substring(0, line.length() - 1);
484 | }
485 | _infile[_countRandomTests++] = line;
486 |
487 | try
488 | {
489 | bw.write(line);
490 | bw.newLine();
491 | line = "";
492 | }
493 | catch (Exception ex)
494 | {
495 | }
496 |
497 | }
498 | while (s.nextSolution() && _countRandomTests < NoSolutions);
499 |
500 |
501 | try
502 | {
503 | bw.close();
504 | }
505 | catch (IOException e)
506 | {
507 |
508 | e.printStackTrace();
509 | }
510 |
511 | }
512 | catch (Exception ex)
513 | {
514 | if (ex.getMessage().equals(""))
515 | {
516 | JOptionPane.showMessageDialog(parentFrame, "Error getting random test!!");
517 | } else
518 | {
519 | JOptionPane.showMessageDialog(parentFrame, ex.getMessage());
520 | }
521 | }
522 | }
523 |
524 |
525 | public boolean Solver(JFrame screen, JProgressBar pb)
526 | {
527 | try
528 | {
529 | ArrayList> solution = new ArrayList>();
530 |
531 |
532 | //for each constraints get its solutions
533 | // for (meConstraint mc : lc)
534 | //{
535 |
536 |
537 | m = new CPModel();
538 | CreateVariables();//crate variable for the model
539 |
540 | // CreateConstraints(lc.indexOf(mc)); //create chco constraint
541 | // CreateConstraints();
542 |
543 | CPSolver s = new CPSolver(); //create object solver
544 | m.setDefaultExpressionDecomposition(true);
545 | s.read(m); //read model (contains variables and constraints)
546 | s.getConfiguration().putInt(Configuration.SOLUTION_POOL_CAPACITY, Integer.MAX_VALUE);
547 |
548 |
549 | IntegerVariable var;
550 | Iterator variables = m.getIntVarIterator();
551 |
552 |
553 | s.solveAll(); //solve model
554 | // int rootworld = s.getEnvironment().getWorldIndex();
555 | // s.worldPush();
556 |
557 |
558 | // s.solveAll();
559 | // ISolutionPool pool = s.getSearchStrategy().getSolutionPool();
560 | //
561 | if (!s.isFeasible())
562 | {
563 | JOptionPane.showMessageDialog(screen, "Constraints don't have a feasible solution!!");
564 | return false;
565 | }
566 |
567 | // pb.setIndeterminate(false);
568 | // pb.setStringPainted(true);
569 | // pb.setValue(0);
570 | // pb.setMaximum(s.getNbSolutions());
571 |
572 | File fileInvalid = new File("C:\\Users\\ind1\\Documents\\mendoza\\My Documents\\tmpInvalid.txt");
573 | FileWriter fwInvalid = new FileWriter(fileInvalid);
574 | BufferedWriter bwInvalid = new BufferedWriter(fwInvalid);
575 |
576 | Parameter p = null;
577 | //get first solution
578 |
579 | ArrayList t = new ArrayList();
580 | // StringBuilder line = null;
581 | String line;
582 |
583 | int value;
584 | String valueMap;
585 |
586 |
587 | do
588 | {
589 |
590 |
591 | line = "";//new StringBuilder();
592 | t.clear();
593 | variables = m.getIntVarIterator();
594 |
595 |
596 | while (variables.hasNext())
597 | {
598 | var = variables.next();
599 | value = s.getVar(var).getVal();
600 | valueMap = "";
601 | t.add(value);
602 |
603 |
604 | p = lp.get(t.size() - 1);
605 | if (p.getType() == Parameter.PARAM_TYPE_ENUM)
606 | {
607 | valueMap = enumList.get(value).toString();
608 | }
609 |
610 | if (p.getType() == Parameter.PARAM_TYPE_BOOL)
611 | {
612 | valueMap = value == 0 ? Boolean.toString(false).toUpperCase() : Boolean.toString(true)
613 | .toUpperCase();
614 | }
615 |
616 | if (p.getType() == Parameter.PARAM_TYPE_INT)
617 | {
618 | valueMap = Integer.toString(value);
619 | }
620 |
621 | //if (line.length() > 0) line.append(", ");
622 | //line.append(valueMap).append(",");
623 | line = line + valueMap + ",";
624 |
625 |
626 | }
627 |
628 |
629 | bwInvalid.write(line);
630 | bwInvalid.newLine();
631 | bwInvalid.flush();
632 |
633 | variables = null;
634 |
635 | }
636 | while (s.nextSolution().booleanValue());
637 |
638 |
639 | bwInvalid.close();
640 |
641 |
642 | /*
643 | while (variables.hasNext())
644 | {
645 | var = (IntegerVariable)variables.next();
646 | value = s.getVar(var).getVal();
647 |
648 |
649 | t.add(value);
650 |
651 |
652 |
653 | p = lp.get(t.size()-1);
654 | if (p.getType() == Parameter.PARAM_TYPE_ENUM)
655 | valueMap = enumList.get((int) value).toString();
656 |
657 | if (p.getType() == Parameter.PARAM_TYPE_BOOL)
658 | valueMap = (int) value==0 ? Boolean.toString(false).toUpperCase() : Boolean.toString(true).toUpperCase();
659 |
660 | if (p.getType() == Parameter.PARAM_TYPE_INT)
661 | valueMap = Integer.toString((int) value);
662 |
663 |
664 |
665 |
666 |
667 | line=line + valueMap + ",";
668 | }
669 |
670 | bwInvalid.write(line);
671 | bwInvalid.newLine();
672 | //bwInvalid.flush();
673 |
674 | // solution.add(t);
675 |
676 | //get all solutions
677 | while (s.nextSolution().booleanValue() )
678 | {
679 | //variables = m.getIntVarIterator();
680 | var = null;
681 | t = new ArrayList();
682 | line="";
683 | p=null;
684 |
685 | while (variables.hasNext())
686 | {
687 | var = (IntegerVariable)variables.next();
688 | value = s.getVar(var).getVal();
689 | t.add(value);
690 |
691 |
692 |
693 | p = lp.get(t.size()-1);
694 | if (p.getType() == Parameter.PARAM_TYPE_ENUM)
695 | valueMap = enumList.get((int) value).toString();
696 |
697 | if (p.getType() == Parameter.PARAM_TYPE_BOOL)
698 | valueMap = (int) value==0 ? Boolean.toString(false).toUpperCase() : Boolean.toString(true).toUpperCase();
699 |
700 | if (p.getType() == Parameter.PARAM_TYPE_INT)
701 | valueMap = Integer.toString((int) value);
702 |
703 |
704 |
705 | line=line + valueMap + ",";
706 | }
707 |
708 |
709 | bwInvalid.write(line);
710 | bwInvalid.newLine();
711 | // bwInvalid.flush();
712 |
713 | // solution.add(t);
714 |
715 |
716 |
717 | if (s.isFeasible()==null || s.isFeasible()==Boolean.FALSE)
718 | break;
719 | }
720 |
721 | bwInvalid.close();
722 | // if (!solution.contains(t))
723 |
724 |
725 |
726 |
727 | /* IntegerVariable var = null;
728 | int value;
729 |
730 |
731 |
732 | for (Solution sol:pool.asList())
733 | {
734 | ArrayList t = new ArrayList();
735 | Iterator variables =m.getIntVarIterator();
736 |
737 | s.worldPopUntil(rootworld); // restore the original state, where domains were as declared (not yet instantiated)
738 | s.worldPush(); // backup the current state of the solver, to allow other solution restoration
739 | s.restoreSolution(sol); // restore the solution
740 |
741 |
742 |
743 | int count=0;
744 | while (count0)
763 | resultmapped = new String[solution.size()][];
764 |
765 | //get mapped solution
766 | for (List l : solution)
767 | {
768 | x = l.toArray();
769 |
770 | resultmapped[i] = new String[x.length];
771 |
772 |
773 | for (int j = 0; j < x.length; j++)
774 | {
775 | p = lp.get(j);
776 | if (p.getType() == Parameter.PARAM_TYPE_ENUM)
777 | resultmapped[i][j] = enumList.get((int) x[j]).toString();
778 |
779 | if (p.getType() == Parameter.PARAM_TYPE_BOOL)
780 | resultmapped[i][j] = (int) x[j]==0 ? Boolean.toString(false).toUpperCase() : Boolean.toString(true).toUpperCase();
781 |
782 | if (p.getType() == Parameter.PARAM_TYPE_INT)
783 | resultmapped[i][j] = Integer.toString((int) x[j]);
784 |
785 | }
786 | i++;
787 |
788 | }*/
789 |
790 | return true;
791 | }
792 | catch (Exception ex)
793 | {
794 | System.out.println(ex.getMessage());
795 | return false;
796 |
797 | }
798 | }
799 |
800 | public boolean EvaluateCombination(String[][] Parm_Value)
801 | {
802 |
803 |
804 | CPSolver s;
805 | List listparams = new ArrayList();
806 |
807 | for (meConstraint c : lc)
808 | {
809 | m = new CPModel();
810 | listparams.clear();
811 |
812 | for (String[] o : Parm_Value)
813 | {
814 | listparams.add(o);
815 | }
816 |
817 | for (String name : c.get_params())
818 | {
819 | boolean fnd = false;
820 |
821 | for (String[] a : listparams)
822 | {
823 |
824 | if (a[0].trim().equals(name.trim()))
825 | {
826 | fnd = true;
827 | break;
828 | }
829 | }
830 | if (!fnd)
831 | {
832 | String[] o = new String[2];
833 | o[0] = name;
834 | o[1] = "";
835 | listparams.add(o);
836 | }
837 | }
838 |
839 |
840 | CreateCombinationsVariables(listparams);//crate variable for the model
841 | CreateConstraints(c);
842 |
843 | s = new CPSolver(); //create object solver
844 | m.setDefaultExpressionDecomposition(false);
845 | s.read(m); //read model (contains variables and constraints)
846 | s.getConfiguration().putInt(Configuration.SOLUTION_POOL_CAPACITY, Integer.MAX_VALUE);
847 | s.solveAll(); //solve model
848 |
849 | if (!s.isFeasible())
850 | {
851 | return false;
852 | }
853 | m = null;
854 | s = null;
855 | }
856 |
857 | return true;
858 | }
859 |
860 | }
861 |
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/com/nist/ccmcl/ChocoVariable.java:
--------------------------------------------------------------------------------
1 | package com.nist.ccmcl;
2 |
3 |
4 | import choco.Choco;
5 | import choco.kernel.model.variables.integer.IntegerVariable;
6 | import choco.kernel.solver.variables.integer.IntDomain;
7 |
8 | import java.util.ArrayList;
9 |
10 |
11 | public class ChocoVariable
12 | {
13 |
14 |
15 | String name;
16 | IntegerVariable var; //used for choco
17 | Parameter param; //related parameter
18 | ArrayList values; //domain from parameter
19 |
20 | private IntDomain newDomain; //reduced domain
21 | private int groupID; //constraint group
22 | private int[] countSolved;
23 |
24 | public ChocoVariable(Parameter par, ArrayList val)
25 | {
26 | param = par;
27 | name = par.getName();
28 | values = new ArrayList(val);
29 | var = Choco.makeIntVar(par.getName(), values);
30 | groupID = -1;
31 | countSolved = new int[val.size()];
32 | }
33 |
34 |
35 | public String getName()
36 | {
37 | return name;
38 | }
39 |
40 | public void setName(String name)
41 | {
42 | this.name = name;
43 | }
44 |
45 | public IntegerVariable getVar()
46 | {
47 | return var;
48 | }
49 |
50 |
51 | public void setVar(IntegerVariable var)
52 | {
53 | this.var = var;
54 | }
55 |
56 |
57 | public int getGroupID()
58 | {
59 | return groupID;
60 | }
61 |
62 | public void setGroupID(int groupID)
63 | {
64 | this.groupID = groupID;
65 | }
66 |
67 |
68 | public boolean checkValue(int v)
69 | {
70 | if (newDomain == null)
71 | {
72 | if (values.contains(v))
73 | {
74 | return true;
75 | }
76 | else
77 | {
78 | return false;
79 | }
80 | }
81 | return newDomain.contains(v);
82 | }
83 |
84 | public void setNewDomain(IntDomain newDomain)
85 | {
86 | this.newDomain = newDomain;
87 | }
88 |
89 | public int getValue(int idx)
90 | {
91 | countSolved[idx]++;
92 | return values.get(idx);
93 | }
94 |
95 | public int getIdx(int value)
96 | {
97 | return values.indexOf(value);
98 | }
99 |
100 | public void printInfo()
101 | {
102 | System.out.print(name + ": \t");
103 | for (int i : countSolved)
104 | {
105 | if (i > 0)
106 | {
107 | System.out.print(i + "\t");
108 | }
109 | }
110 | System.out.println("\t" + newDomain);
111 |
112 |
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/com/nist/ccmcl/Constants.java:
--------------------------------------------------------------------------------
1 | package com.nist.ccmcl;
2 |
3 | import choco.Choco;
4 | import choco.kernel.model.constraints.Constraint;
5 | import choco.kernel.model.variables.integer.IntegerExpressionVariable;
6 | import choco.kernel.model.variables.integer.IntegerVariable;
7 |
8 | import java.util.ArrayList;
9 | import java.util.LinkedHashSet;
10 |
11 |
12 | public class Constants
13 | {
14 |
15 | public static final int TYPE_INVALID = -1;
16 | public static final int TYPE_INT = 0;
17 | public static final int TYPE_STRING = 1;
18 | public static final int TYPE_BOOL = 2;
19 | public static final String INT_TYPE = "int";
20 | public static final String INTEGER_TYPE = "integer";
21 | public static final String BOOL_TYPE = "bool";
22 | public static final String BOOLEAN_TYPE = "boolean";
23 | public static final String ENUM_TYPE = "enum";
24 | static String SYSTEM_MODIFIED = "Modify";
25 | static String PARAM_TYPE_BOOL = "@bool@";
26 | static String PARAM_TYPE_INT = "@int@";
27 | static String PARAM_TYPE_ENUM = "@enum@";
28 | static String FALSE = "false";
29 | static String TRUE = "true";
30 | static String DIGIT = "\\d*";
31 | static String LETTER = "\\w*";
32 | static String MOD = "%";
33 | static String DIV = "/";
34 | static String MUL = "*";
35 | static String MINUS = "-";
36 | static String PLUS = "+";
37 | static String NOT_str = "NOT";
38 | static String NOT = "!";
39 | static String OR_str = "OR";
40 | static String OR = "||";
41 | static String OR_regex = "|";
42 | static String NE = "-";
43 | static String GE = ">=";
44 | static String GE_STR = "GE";
45 | static String LE = "<=";
46 | static String LE_STR = "LE";
47 | static String LT = "<";
48 | static String GT = ">";
49 | static String EQ2 = "==";
50 | static String EQ = "=";
51 | static String AND = "&&";
52 | static String AND_str = "AND";
53 | static String AND_regex = "&";
54 | static String IMP = "=>";
55 | static String IMP_STR = "\"=>\"";
56 | static String NEQ = "!=";
57 | static String NEQ_STR = "NEQ";
58 | static String OPEN_PAR = "(";
59 | static String CLOSE_PAR = ")";
60 | static String BSLASH = "\\";
61 | static String SPACE = " ";
62 | static String DOUBLEQUOTE = "\"";
63 | ArrayList enumList;
64 | ArrayList chocoVariables;
65 | private LinkedHashSet varInUse;
66 |
67 | public Constants(ArrayList al_e, LinkedHashSet lh_vu, ArrayList al_cv)
68 | {
69 | enumList = al_e;
70 | chocoVariables = al_cv;
71 | varInUse = lh_vu;
72 | }
73 |
74 | public IntegerExpressionVariable mk_enum(String s)
75 | {
76 | int v = enumList.indexOf(s);
77 | if (v < 0)
78 | {
79 | enumList.add(s);
80 | System.out.println("Warning: No domain contains this enum value - " + s);
81 | return mk_int(enumList.size() - 1);
82 | }
83 | return mk_int(v);
84 | }
85 |
86 | public IntegerVariable mk_int(int v)
87 | {
88 |
89 | return Choco.constant(v);
90 | }
91 |
92 | public IntegerVariable mk_int_var(String s)
93 | {
94 | for (ChocoVariable cv : chocoVariables)
95 | {
96 | if (s.equals(cv.getName()))
97 | {
98 |
99 | varInUse.add(cv.getVar());
100 | return cv.getVar();
101 | }
102 | }
103 | return null;
104 | }
105 |
106 | public IntegerVariable mk_bool_var(String s)
107 | {
108 | return mk_int_var(s);
109 | }
110 |
111 | public IntegerVariable mk_true()
112 | {
113 |
114 | return Choco.constant(1);
115 | }
116 |
117 | public IntegerVariable mk_false()
118 | {
119 |
120 | return Choco.constant(0);
121 | }
122 |
123 | public IntegerExpressionVariable mk_op(String op, IntegerExpressionVariable oprnd1, IntegerExpressionVariable oprnd2)
124 | {
125 |
126 | if (op.equalsIgnoreCase(PLUS))
127 | {
128 | return Choco.plus(oprnd1, oprnd2);
129 | }
130 | if (op.equalsIgnoreCase(MUL))
131 | {
132 | return Choco.mult(oprnd1, oprnd2);
133 | }
134 | if (op.equalsIgnoreCase(MINUS))
135 | {
136 | return Choco.minus(oprnd1, oprnd2);
137 | }
138 | if (op.equalsIgnoreCase(DIV))
139 | {
140 | return Choco.div(oprnd1, oprnd2);
141 | }
142 | if (op.equalsIgnoreCase(MOD))
143 | {
144 | return Choco.mod(oprnd1, oprnd2);
145 | }
146 | return null;
147 | }
148 |
149 | public Constraint mk_comp(String op, IntegerExpressionVariable oprnd1, IntegerExpressionVariable oprnd2)
150 | {
151 |
152 | if (op.equalsIgnoreCase(EQ) || op.equalsIgnoreCase(EQ2))
153 | {
154 | return Choco.eq(oprnd1, oprnd2);
155 | }
156 | if (op.equalsIgnoreCase(NEQ))
157 | {
158 | return Choco.neq(oprnd1, oprnd2);
159 | }
160 | if (op.equalsIgnoreCase(LT))
161 | {
162 | return Choco.lt(oprnd1, oprnd2);
163 | }
164 | if (op.equalsIgnoreCase(LE))
165 | {
166 | return Choco.leq(oprnd1, oprnd2);
167 | }
168 | if (op.equalsIgnoreCase(GT))
169 | {
170 | return Choco.gt(oprnd1, oprnd2);
171 | }
172 | if (op.equalsIgnoreCase(GE))
173 | {
174 | return Choco.geq(oprnd1, oprnd2);
175 | }
176 | return null;
177 | }
178 |
179 | public Constraint mk_cst(String op, Constraint oprnd1, Constraint oprnd2)
180 | {
181 |
182 | if (op.equalsIgnoreCase(NOT))
183 | {
184 | return Choco.not(oprnd2);
185 | }
186 | if (op.equalsIgnoreCase(AND))
187 | {
188 | return Choco.and(oprnd1, oprnd2);
189 | }
190 | if (op.equalsIgnoreCase(OR))
191 | {
192 | return Choco.or(oprnd1, oprnd2);
193 | }
194 | if (op.equalsIgnoreCase(IMP))
195 | {
196 | return Choco.implies(oprnd1, oprnd2);
197 | }
198 | return null;
199 | }
200 | }
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/com/nist/ccmcl/ConstraintChocoParserConstants.java:
--------------------------------------------------------------------------------
1 | package com.nist.ccmcl;
2 | /* Generated By:JavaCC: Do not edit this line. ConstraintChocoParserConstants.java */
3 |
4 | /**
5 | * Token literal values and constants.
6 | * Generated by org.javacc.parser.OtherFilesGen#start()
7 | */
8 | public interface ConstraintChocoParserConstants {
9 |
10 | /** End of File. */
11 | int EOF = 0;
12 | /** RegularExpression Id. */
13 | int INTEGER_LITERAL = 5;
14 | /** RegularExpression Id. */
15 | int STRING_LITERAL = 6;
16 | /** RegularExpression Id. */
17 | int TRUE = 7;
18 | /** RegularExpression Id. */
19 | int FALSE = 8;
20 | /** RegularExpression Id. */
21 | int IDENTIFIER = 9;
22 | /** RegularExpression Id. */
23 | int LETTER = 10;
24 | /** RegularExpression Id. */
25 | int DIGIT = 11;
26 | /** RegularExpression Id. */
27 | int EQ = 12;
28 | /** RegularExpression Id. */
29 | int GT = 13;
30 | /** RegularExpression Id. */
31 | int LT = 14;
32 | /** RegularExpression Id. */
33 | int LE = 15;
34 | /** RegularExpression Id. */
35 | int GE = 16;
36 | /** RegularExpression Id. */
37 | int NE = 17;
38 | /** RegularExpression Id. */
39 | int AND = 18;
40 | /** RegularExpression Id. */
41 | int OR = 19;
42 | /** RegularExpression Id. */
43 | int NOT = 20;
44 | /** RegularExpression Id. */
45 | int IM = 21;
46 | /** RegularExpression Id. */
47 | int PLUS = 22;
48 | /** RegularExpression Id. */
49 | int MINUS = 23;
50 | /** RegularExpression Id. */
51 | int MUL = 24;
52 | /** RegularExpression Id. */
53 | int DIV = 25;
54 | /** RegularExpression Id. */
55 | int MOD = 26;
56 | /** RegularExpression Id. */
57 | int OPENPAR = 27;
58 | /** RegularExpression Id. */
59 | int CLOSEPAR = 28;
60 |
61 | /** Lexical state. */
62 | int DEFAULT = 0;
63 |
64 | /** Literal token values. */
65 | String[] tokenImage = {
66 | "",
67 | "\" \"",
68 | "\"\\t\"",
69 | "\"\\n\"",
70 | "\"\\r\"",
71 | "",
72 | "",
73 | "",
74 | "",
75 | "",
76 | "",
77 | "",
78 | "",
79 | "\">\"",
80 | "\"<\"",
81 | "\"<=\"",
82 | "\">=\"",
83 | "\"!=\"",
84 | "\"&&\"",
85 | "\"||\"",
86 | "",
87 | "\"=>\"",
88 | "\"+\"",
89 | "\"-\"",
90 | "\"*\"",
91 | "\"/\"",
92 | "\"%\"",
93 | "\"(\"",
94 | "\")\"",
95 | };
96 |
97 | }
98 |
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/com/nist/ccmcl/ConstraintChocoParserTokenManager.java:
--------------------------------------------------------------------------------
1 | package com.nist.ccmcl;
2 | /* Generated By:JavaCC: Do not edit this line. ConstraintChocoParserTokenManager.java */
3 |
4 |
5 | /** Token Manager. */
6 | public class ConstraintChocoParserTokenManager implements ConstraintChocoParserConstants
7 | {
8 |
9 | /** Debug output. */
10 | public java.io.PrintStream debugStream = System.out;
11 | /** Set debug output. */
12 | public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
13 | private final int jjStopStringLiteralDfa_0(int pos, long active0)
14 | {
15 | switch (pos)
16 | {
17 | case 0:
18 | if ((active0 & 0x200000L) != 0L)
19 | {
20 | jjmatchedKind = 12;
21 | return 16;
22 | }
23 | if ((active0 & 0x20000L) != 0L)
24 | {
25 | jjmatchedKind = 20;
26 | return -1;
27 | }
28 | return -1;
29 | default :
30 | return -1;
31 | }
32 | }
33 | private final int jjStartNfa_0(int pos, long active0)
34 | {
35 | return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
36 | }
37 | private int jjStopAtPos(int pos, int kind)
38 | {
39 | jjmatchedKind = kind;
40 | jjmatchedPos = pos;
41 | return pos + 1;
42 | }
43 | private int jjMoveStringLiteralDfa0_0()
44 | {
45 | switch(curChar)
46 | {
47 | case 33:
48 | return jjMoveStringLiteralDfa1_0(0x20000L);
49 | case 37:
50 | return jjStopAtPos(0, 26);
51 | case 38:
52 | return jjMoveStringLiteralDfa1_0(0x40000L);
53 | case 40:
54 | return jjStopAtPos(0, 27);
55 | case 41:
56 | return jjStopAtPos(0, 28);
57 | case 42:
58 | return jjStopAtPos(0, 24);
59 | case 43:
60 | return jjStopAtPos(0, 22);
61 | case 45:
62 | return jjStopAtPos(0, 23);
63 | case 47:
64 | return jjStopAtPos(0, 25);
65 | case 60:
66 | jjmatchedKind = 14;
67 | return jjMoveStringLiteralDfa1_0(0x8000L);
68 | case 61:
69 | return jjMoveStringLiteralDfa1_0(0x200000L);
70 | case 62:
71 | jjmatchedKind = 13;
72 | return jjMoveStringLiteralDfa1_0(0x10000L);
73 | case 124:
74 | return jjMoveStringLiteralDfa1_0(0x80000L);
75 | default :
76 | return jjMoveNfa_0(1, 0);
77 | }
78 | }
79 | private int jjMoveStringLiteralDfa1_0(long active0)
80 | {
81 | try { curChar = input_stream.readChar(); }
82 | catch(java.io.IOException e) {
83 | jjStopStringLiteralDfa_0(0, active0);
84 | return 1;
85 | }
86 | switch(curChar)
87 | {
88 | case 38:
89 | if ((active0 & 0x40000L) != 0L)
90 | return jjStopAtPos(1, 18);
91 | break;
92 | case 61:
93 | if ((active0 & 0x8000L) != 0L)
94 | return jjStopAtPos(1, 15);
95 | else if ((active0 & 0x10000L) != 0L)
96 | return jjStopAtPos(1, 16);
97 | else if ((active0 & 0x20000L) != 0L)
98 | return jjStopAtPos(1, 17);
99 | break;
100 | case 62:
101 | if ((active0 & 0x200000L) != 0L)
102 | return jjStopAtPos(1, 21);
103 | break;
104 | case 124:
105 | if ((active0 & 0x80000L) != 0L)
106 | return jjStopAtPos(1, 19);
107 | break;
108 | default :
109 | break;
110 | }
111 | return jjStartNfa_0(0, active0);
112 | }
113 | static final long[] jjbitVec0 = {
114 | 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
115 | };
116 | private int jjMoveNfa_0(int startState, int curPos)
117 | {
118 | int startsAt = 0;
119 | jjnewStateCnt = 33;
120 | int i = 1;
121 | jjstateSet[0] = startState;
122 | int kind = 0x7fffffff;
123 | for (;;)
124 | {
125 | if (++jjround == 0x7fffffff)
126 | ReInitRounds();
127 | if (curChar < 64)
128 | {
129 | long l = 1L << curChar;
130 | do
131 | {
132 | switch(jjstateSet[--i])
133 | {
134 | case 1:
135 | if ((0x3ff000000000000L & l) != 0L)
136 | {
137 | if (kind > 5)
138 | kind = 5;
139 | jjCheckNAdd(0);
140 | }
141 | else if (curChar == 33)
142 | {
143 | if (kind > 20)
144 | kind = 20;
145 | }
146 | else if (curChar == 61)
147 | jjstateSet[jjnewStateCnt++] = 16;
148 | else if (curChar == 34)
149 | jjCheckNAddTwoStates(2, 3);
150 | if (curChar == 61)
151 | {
152 | if (kind > 12)
153 | kind = 12;
154 | }
155 | break;
156 | case 0:
157 | if ((0x3ff000000000000L & l) == 0L)
158 | break;
159 | if (kind > 5)
160 | kind = 5;
161 | jjCheckNAdd(0);
162 | break;
163 | case 2:
164 | if ((0xfffffffbffffdbffL & l) != 0L)
165 | jjCheckNAddTwoStates(2, 3);
166 | break;
167 | case 3:
168 | if (curChar == 34 && kind > 6)
169 | kind = 6;
170 | break;
171 | case 14:
172 | if ((0x3ff000000000000L & l) == 0L)
173 | break;
174 | if (kind > 9)
175 | kind = 9;
176 | jjstateSet[jjnewStateCnt++] = 14;
177 | break;
178 | case 15:
179 | case 16:
180 | if (curChar == 61 && kind > 12)
181 | kind = 12;
182 | break;
183 | case 17:
184 | if (curChar == 61)
185 | jjstateSet[jjnewStateCnt++] = 16;
186 | break;
187 | case 18:
188 | if (curChar == 33 && kind > 20)
189 | kind = 20;
190 | break;
191 | default : break;
192 | }
193 | } while(i != startsAt);
194 | }
195 | else if (curChar < 128)
196 | {
197 | long l = 1L << (curChar & 077);
198 | do
199 | {
200 | switch(jjstateSet[--i])
201 | {
202 | case 1:
203 | if ((0x7fffffe87fffffeL & l) != 0L)
204 | {
205 | if (kind > 9)
206 | kind = 9;
207 | jjCheckNAdd(14);
208 | }
209 | else if (curChar == 126)
210 | {
211 | if (kind > 20)
212 | kind = 20;
213 | }
214 | if (curChar == 84)
215 | jjAddStates(0, 1);
216 | else if (curChar == 70)
217 | jjAddStates(2, 3);
218 | else if (curChar == 102)
219 | jjstateSet[jjnewStateCnt++] = 11;
220 | else if (curChar == 116)
221 | jjstateSet[jjnewStateCnt++] = 6;
222 | break;
223 | case 2:
224 | if ((0xffffffffefffffffL & l) != 0L)
225 | jjAddStates(4, 5);
226 | break;
227 | case 4:
228 | if (curChar == 101 && kind > 7)
229 | kind = 7;
230 | break;
231 | case 5:
232 | case 31:
233 | if (curChar == 117)
234 | jjCheckNAdd(4);
235 | break;
236 | case 6:
237 | if (curChar == 114)
238 | jjstateSet[jjnewStateCnt++] = 5;
239 | break;
240 | case 7:
241 | if (curChar == 116)
242 | jjstateSet[jjnewStateCnt++] = 6;
243 | break;
244 | case 8:
245 | if (curChar == 101 && kind > 8)
246 | kind = 8;
247 | break;
248 | case 9:
249 | case 24:
250 | if (curChar == 115)
251 | jjCheckNAdd(8);
252 | break;
253 | case 10:
254 | if (curChar == 108)
255 | jjstateSet[jjnewStateCnt++] = 9;
256 | break;
257 | case 11:
258 | if (curChar == 97)
259 | jjstateSet[jjnewStateCnt++] = 10;
260 | break;
261 | case 12:
262 | if (curChar == 102)
263 | jjstateSet[jjnewStateCnt++] = 11;
264 | break;
265 | case 13:
266 | case 14:
267 | if ((0x7fffffe87fffffeL & l) == 0L)
268 | break;
269 | if (kind > 9)
270 | kind = 9;
271 | jjCheckNAdd(14);
272 | break;
273 | case 18:
274 | if (curChar == 126 && kind > 20)
275 | kind = 20;
276 | break;
277 | case 19:
278 | if (curChar == 70)
279 | jjAddStates(2, 3);
280 | break;
281 | case 20:
282 | if (curChar == 69 && kind > 8)
283 | kind = 8;
284 | break;
285 | case 21:
286 | if (curChar == 83)
287 | jjstateSet[jjnewStateCnt++] = 20;
288 | break;
289 | case 22:
290 | if (curChar == 76)
291 | jjstateSet[jjnewStateCnt++] = 21;
292 | break;
293 | case 23:
294 | if (curChar == 65)
295 | jjstateSet[jjnewStateCnt++] = 22;
296 | break;
297 | case 25:
298 | if (curChar == 108)
299 | jjstateSet[jjnewStateCnt++] = 24;
300 | break;
301 | case 26:
302 | if (curChar == 97)
303 | jjstateSet[jjnewStateCnt++] = 25;
304 | break;
305 | case 27:
306 | if (curChar == 84)
307 | jjAddStates(0, 1);
308 | break;
309 | case 28:
310 | if (curChar == 69 && kind > 7)
311 | kind = 7;
312 | break;
313 | case 29:
314 | if (curChar == 85)
315 | jjstateSet[jjnewStateCnt++] = 28;
316 | break;
317 | case 30:
318 | if (curChar == 82)
319 | jjstateSet[jjnewStateCnt++] = 29;
320 | break;
321 | case 32:
322 | if (curChar == 114)
323 | jjstateSet[jjnewStateCnt++] = 31;
324 | break;
325 | default : break;
326 | }
327 | } while(i != startsAt);
328 | }
329 | else
330 | {
331 | int i2 = (curChar & 0xff) >> 6;
332 | long l2 = 1L << (curChar & 077);
333 | do
334 | {
335 | switch(jjstateSet[--i])
336 | {
337 | case 2:
338 | if ((jjbitVec0[i2] & l2) != 0L)
339 | jjAddStates(4, 5);
340 | break;
341 | default : break;
342 | }
343 | } while(i != startsAt);
344 | }
345 | if (kind != 0x7fffffff)
346 | {
347 | jjmatchedKind = kind;
348 | jjmatchedPos = curPos;
349 | kind = 0x7fffffff;
350 | }
351 | ++curPos;
352 | if ((i = jjnewStateCnt) == (startsAt = 33 - (jjnewStateCnt = startsAt)))
353 | return curPos;
354 | try { curChar = input_stream.readChar(); }
355 | catch(java.io.IOException e) { return curPos; }
356 | }
357 | }
358 | static final int[] jjnextStates = {
359 | 30, 32, 23, 26, 2, 3,
360 | };
361 |
362 | /** Token literal values. */
363 | public static final String[] jjstrLiteralImages = {
364 | "", null, null, null, null, null, null, null, null, null, null, null, null,
365 | "\76", "\74", "\74\75", "\76\75", "\41\75", "\46\46", "\174\174", null, "\75\76",
366 | "\53", "\55", "\52", "\57", "\45", "\50", "\51", };
367 |
368 | /** Lexer state names. */
369 | public static final String[] lexStateNames = {
370 | "DEFAULT",
371 | };
372 | static final long[] jjtoToken = {
373 | 0x1ffff3e1L,
374 | };
375 | static final long[] jjtoSkip = {
376 | 0x1eL,
377 | };
378 | protected SimpleCharStream input_stream;
379 | private final int[] jjrounds = new int[33];
380 | private final int[] jjstateSet = new int[66];
381 | protected char curChar;
382 | /** Constructor. */
383 | public ConstraintChocoParserTokenManager(SimpleCharStream stream){
384 | if (SimpleCharStream.staticFlag)
385 | throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
386 | input_stream = stream;
387 | }
388 |
389 | /** Constructor. */
390 | public ConstraintChocoParserTokenManager(SimpleCharStream stream, int lexState){
391 | this(stream);
392 | SwitchTo(lexState);
393 | }
394 |
395 | /** Reinitialise parser. */
396 | public void ReInit(SimpleCharStream stream)
397 | {
398 | jjmatchedPos = jjnewStateCnt = 0;
399 | curLexState = defaultLexState;
400 | input_stream = stream;
401 | ReInitRounds();
402 | }
403 | private void ReInitRounds()
404 | {
405 | int i;
406 | jjround = 0x80000001;
407 | for (i = 33; i-- > 0;)
408 | jjrounds[i] = 0x80000000;
409 | }
410 |
411 | /** Reinitialise parser. */
412 | public void ReInit(SimpleCharStream stream, int lexState)
413 | {
414 | ReInit(stream);
415 | SwitchTo(lexState);
416 | }
417 |
418 | /** Switch to specified lex state. */
419 | public void SwitchTo(int lexState)
420 | {
421 | if (lexState >= 1 || lexState < 0)
422 | throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
423 | else
424 | curLexState = lexState;
425 | }
426 |
427 | protected Token jjFillToken()
428 | {
429 | final Token t;
430 | final String curTokenImage;
431 | final int beginLine;
432 | final int endLine;
433 | final int beginColumn;
434 | final int endColumn;
435 | String im = jjstrLiteralImages[jjmatchedKind];
436 | curTokenImage = (im == null) ? input_stream.GetImage() : im;
437 | beginLine = input_stream.getBeginLine();
438 | beginColumn = input_stream.getBeginColumn();
439 | endLine = input_stream.getEndLine();
440 | endColumn = input_stream.getEndColumn();
441 | t = Token.newToken(jjmatchedKind, curTokenImage);
442 |
443 | t.beginLine = beginLine;
444 | t.endLine = endLine;
445 | t.beginColumn = beginColumn;
446 | t.endColumn = endColumn;
447 |
448 | return t;
449 | }
450 |
451 | int curLexState = 0;
452 | int defaultLexState = 0;
453 | int jjnewStateCnt;
454 | int jjround;
455 | int jjmatchedPos;
456 | int jjmatchedKind;
457 |
458 | /** Get the next Token. */
459 | public Token getNextToken()
460 | {
461 | Token matchedToken;
462 | int curPos = 0;
463 |
464 | EOFLoop :
465 | for (;;)
466 | {
467 | try
468 | {
469 | curChar = input_stream.BeginToken();
470 | }
471 | catch(java.io.IOException e)
472 | {
473 | jjmatchedKind = 0;
474 | matchedToken = jjFillToken();
475 | return matchedToken;
476 | }
477 |
478 | try { input_stream.backup(0);
479 | while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L)
480 | curChar = input_stream.BeginToken();
481 | }
482 | catch (java.io.IOException e1) { continue EOFLoop; }
483 | jjmatchedKind = 0x7fffffff;
484 | jjmatchedPos = 0;
485 | curPos = jjMoveStringLiteralDfa0_0();
486 | if (jjmatchedKind != 0x7fffffff)
487 | {
488 | if (jjmatchedPos + 1 < curPos)
489 | input_stream.backup(curPos - jjmatchedPos - 1);
490 | if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
491 | {
492 | matchedToken = jjFillToken();
493 | return matchedToken;
494 | }
495 | else
496 | {
497 | continue EOFLoop;
498 | }
499 | }
500 | int error_line = input_stream.getEndLine();
501 | int error_column = input_stream.getEndColumn();
502 | String error_after = null;
503 | boolean EOFSeen = false;
504 | try { input_stream.readChar(); input_stream.backup(1); }
505 | catch (java.io.IOException e1) {
506 | EOFSeen = true;
507 | error_after = curPos <= 1 ? "" : input_stream.GetImage();
508 | if (curChar == '\n' || curChar == '\r') {
509 | error_line++;
510 | error_column = 0;
511 | }
512 | else
513 | error_column++;
514 | }
515 | if (!EOFSeen) {
516 | input_stream.backup(1);
517 | error_after = curPos <= 1 ? "" : input_stream.GetImage();
518 | }
519 | throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
520 | }
521 | }
522 |
523 | private void jjCheckNAdd(int state)
524 | {
525 | if (jjrounds[state] != jjround)
526 | {
527 | jjstateSet[jjnewStateCnt++] = state;
528 | jjrounds[state] = jjround;
529 | }
530 | }
531 | private void jjAddStates(int start, int end)
532 | {
533 | do {
534 | jjstateSet[jjnewStateCnt++] = jjnextStates[start];
535 | } while (start++ != end);
536 | }
537 | private void jjCheckNAddTwoStates(int state1, int state2)
538 | {
539 | jjCheckNAdd(state1);
540 | jjCheckNAdd(state2);
541 | }
542 |
543 | }
544 |
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/com/nist/ccmcl/ConstraintManager.java:
--------------------------------------------------------------------------------
1 | package com.nist.ccmcl;
2 |
3 | import java.util.ArrayList;
4 | import java.util.HashMap;
5 |
6 |
7 | public class ConstraintManager
8 | {
9 |
10 | public static String[] JustParameterValues(String text)
11 | {
12 |
13 |
14 | for (String s : Tools.ArithmeticsOperators)
15 | {
16 | text = text.replace(s, "?");
17 | }
18 | for (String s : Tools.RelationalOperators)
19 | {
20 | text = text.replace(s, "?");
21 | }
22 | for (String s : Tools.BooleanOperators)
23 | {
24 | text = text.replace(s, "?");
25 | }
26 |
27 | for (String s : Tools.GroupOperators)
28 | {
29 | text = text.replace(s, "?");
30 | }
31 |
32 |
33 | return text.split("\\?");
34 | }
35 |
36 | public static Boolean isParameter(String text, HashMap parameters)
37 | {
38 | if (parameters.containsKey(text))
39 | {
40 | return true;
41 | }
42 | return false;
43 | }
44 |
45 |
46 | public static Boolean isVariableValue(String text)
47 | {
48 |
49 | if (text.isEmpty())
50 | {
51 | return false;
52 | }
53 | if (Tools.isNumeric(text))
54 | {
55 | return true;
56 | }
57 | if (text.toUpperCase().equals(Boolean.toString(true).toUpperCase()) || text.toUpperCase().equals(
58 | Boolean.toString(false).toUpperCase()
59 | ))
60 | {
61 | return true;
62 | }
63 | if (text.startsWith("\"") && text.endsWith("\""))
64 | {
65 | return true;
66 | }
67 |
68 | return false;
69 | }
70 |
71 | public static Boolean isValidParameterValue(String text, Parameter anterior)
72 | {
73 |
74 | ArrayList p = anterior.getValues();
75 |
76 | if (p.contains(Tools.WithoutQuoations(text.trim())))
77 | {
78 | return true;
79 | }
80 | return false;
81 | }
82 |
83 |
84 | }
85 |
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/com/nist/ccmcl/ConstraintParserConstants.java:
--------------------------------------------------------------------------------
1 | package com.nist.ccmcl;
2 | /* Generated By:JavaCC: Do not edit this line. ConstraintParserConstants.java */
3 |
4 | /**
5 | * Token literal values and constants.
6 | * Generated by org.javacc.parser.OtherFilesGen#start()
7 | */
8 | public interface ConstraintParserConstants {
9 |
10 | /** End of File. */
11 | int EOF = 0;
12 | /** RegularExpression Id. */
13 | int INTEGER_LITERAL = 5;
14 | /** RegularExpression Id. */
15 | int STRING_LITERAL = 6;
16 | /** RegularExpression Id. */
17 | int TRUE = 7;
18 | /** RegularExpression Id. */
19 | int FALSE = 8;
20 | /** RegularExpression Id. */
21 | int IDENTIFIER = 9;
22 | /** RegularExpression Id. */
23 | int LETTER = 10;
24 | /** RegularExpression Id. */
25 | int DIGIT = 11;
26 | /** RegularExpression Id. */
27 | int EQ = 12;
28 | /** RegularExpression Id. */
29 | int GT = 13;
30 | /** RegularExpression Id. */
31 | int LT = 14;
32 | /** RegularExpression Id. */
33 | int LE = 15;
34 | /** RegularExpression Id. */
35 | int GE = 16;
36 | /** RegularExpression Id. */
37 | int NE = 17;
38 | /** RegularExpression Id. */
39 | int AND = 18;
40 | /** RegularExpression Id. */
41 | int OR = 19;
42 | /** RegularExpression Id. */
43 | int NOT = 20;
44 | /** RegularExpression Id. */
45 | int IM = 21;
46 | /** RegularExpression Id. */
47 | int PLUS = 22;
48 | /** RegularExpression Id. */
49 | int MINUS = 23;
50 | /** RegularExpression Id. */
51 | int MUL = 24;
52 | /** RegularExpression Id. */
53 | int DIV = 25;
54 | /** RegularExpression Id. */
55 | int MOD = 26;
56 | /** RegularExpression Id. */
57 | int OPENPAR = 27;
58 | /** RegularExpression Id. */
59 | int CLOSEPAR = 28;
60 |
61 |
62 | /** Lexical state. */
63 | int DEFAULT = 0;
64 |
65 | /** Literal token values. */
66 | String[] tokenImage = {
67 | "",
68 | "\" \"",
69 | "\"\\t\"",
70 | "\"\\n\"",
71 | "\"\\r\"",
72 | "",
73 | "",
74 | "",
75 | "",
76 | "",
77 | "",
78 | "",
79 | "",
80 | "\">\"",
81 | "\"<\"",
82 | "\"<=\"",
83 | "\">=\"",
84 | "\"!=\"",
85 | "\"&&\"",
86 | "\"||\"",
87 | "",
88 | "\"=>\"",
89 | "\"+\"",
90 | "\"-\"",
91 | "\"*\"",
92 | "\"/\"",
93 | "\"%\"",
94 | "\"(\"",
95 | "\")\"",
96 | };
97 |
98 | }
99 |
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/com/nist/ccmcl/ConstraintParserTokenManager.java:
--------------------------------------------------------------------------------
1 | package com.nist.ccmcl;
2 | /* Generated By:JavaCC: Do not edit this line. ConstraintParserTokenManager.java */
3 |
4 |
5 | /** Token Manager. */
6 | public class ConstraintParserTokenManager implements ConstraintParserConstants
7 | {
8 |
9 | /** Debug output. */
10 | public java.io.PrintStream debugStream = System.out;
11 | /** Set debug output. */
12 | public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
13 | private final int jjStopStringLiteralDfa_0(int pos, long active0)
14 | {
15 | switch (pos)
16 | {
17 | case 0:
18 | if ((active0 & 0x200000L) != 0L)
19 | {
20 | jjmatchedKind = 12;
21 | return 16;
22 | }
23 | if ((active0 & 0x20000L) != 0L)
24 | {
25 | jjmatchedKind = 20;
26 | return -1;
27 | }
28 | return -1;
29 | default :
30 | return -1;
31 | }
32 | }
33 | private final int jjStartNfa_0(int pos, long active0)
34 | {
35 | return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
36 | }
37 | private int jjStopAtPos(int pos, int kind)
38 | {
39 | jjmatchedKind = kind;
40 | jjmatchedPos = pos;
41 | return pos + 1;
42 | }
43 | private int jjMoveStringLiteralDfa0_0()
44 | {
45 | switch(curChar)
46 | {
47 | case 33:
48 | return jjMoveStringLiteralDfa1_0(0x20000L);
49 | case 37:
50 | return jjStopAtPos(0, 26);
51 | case 38:
52 | return jjMoveStringLiteralDfa1_0(0x40000L);
53 | case 40:
54 | return jjStopAtPos(0, 27);
55 | case 41:
56 | return jjStopAtPos(0, 28);
57 | case 42:
58 | return jjStopAtPos(0, 24);
59 | case 43:
60 | return jjStopAtPos(0, 22);
61 | case 45:
62 | return jjStopAtPos(0, 23);
63 | case 47:
64 | return jjStopAtPos(0, 25);
65 | case 60:
66 | jjmatchedKind = 14;
67 | return jjMoveStringLiteralDfa1_0(0x8000L);
68 | case 61:
69 | return jjMoveStringLiteralDfa1_0(0x200000L);
70 | case 62:
71 | jjmatchedKind = 13;
72 | return jjMoveStringLiteralDfa1_0(0x10000L);
73 | case 124:
74 | return jjMoveStringLiteralDfa1_0(0x80000L);
75 | default :
76 | return jjMoveNfa_0(1, 0);
77 | }
78 | }
79 | private int jjMoveStringLiteralDfa1_0(long active0)
80 | {
81 | try { curChar = input_stream.readChar(); }
82 | catch(java.io.IOException e) {
83 | jjStopStringLiteralDfa_0(0, active0);
84 | return 1;
85 | }
86 | switch(curChar)
87 | {
88 | case 38:
89 | if ((active0 & 0x40000L) != 0L)
90 | return jjStopAtPos(1, 18);
91 | break;
92 | case 61:
93 | if ((active0 & 0x8000L) != 0L)
94 | return jjStopAtPos(1, 15);
95 | else if ((active0 & 0x10000L) != 0L)
96 | return jjStopAtPos(1, 16);
97 | else if ((active0 & 0x20000L) != 0L)
98 | return jjStopAtPos(1, 17);
99 | break;
100 | case 62:
101 | if ((active0 & 0x200000L) != 0L)
102 | return jjStopAtPos(1, 21);
103 | break;
104 | case 124:
105 | if ((active0 & 0x80000L) != 0L)
106 | return jjStopAtPos(1, 19);
107 | break;
108 | default :
109 | break;
110 | }
111 | return jjStartNfa_0(0, active0);
112 | }
113 | static final long[] jjbitVec0 = {
114 | 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
115 | };
116 | private int jjMoveNfa_0(int startState, int curPos)
117 | {
118 | int startsAt = 0;
119 | jjnewStateCnt = 33;
120 | int i = 1;
121 | jjstateSet[0] = startState;
122 | int kind = 0x7fffffff;
123 | for (;;)
124 | {
125 | if (++jjround == 0x7fffffff)
126 | ReInitRounds();
127 | if (curChar < 64)
128 | {
129 | long l = 1L << curChar;
130 | do
131 | {
132 | switch(jjstateSet[--i])
133 | {
134 | case 1:
135 | if ((0x3ff000000000000L & l) != 0L)
136 | {
137 | if (kind > 5)
138 | kind = 5;
139 | jjCheckNAdd(0);
140 | }
141 | else if (curChar == 33)
142 | {
143 | if (kind > 20)
144 | kind = 20;
145 | }
146 | else if (curChar == 61)
147 | jjstateSet[jjnewStateCnt++] = 16;
148 | else if (curChar == 34)
149 | jjCheckNAddTwoStates(2, 3);
150 | if (curChar == 61)
151 | {
152 | if (kind > 12)
153 | kind = 12;
154 | }
155 | break;
156 | case 0:
157 | if ((0x3ff000000000000L & l) == 0L)
158 | break;
159 | if (kind > 5)
160 | kind = 5;
161 | jjCheckNAdd(0);
162 | break;
163 | case 2:
164 | if ((0xfffffffbffffdbffL & l) != 0L)
165 | jjCheckNAddTwoStates(2, 3);
166 | break;
167 | case 3:
168 | if (curChar == 34 && kind > 6)
169 | kind = 6;
170 | break;
171 | case 14:
172 | if ((0x3ff000000000000L & l) == 0L)
173 | break;
174 | if (kind > 9)
175 | kind = 9;
176 | jjstateSet[jjnewStateCnt++] = 14;
177 | break;
178 | case 15:
179 | case 16:
180 | if (curChar == 61 && kind > 12)
181 | kind = 12;
182 | break;
183 | case 17:
184 | if (curChar == 61)
185 | jjstateSet[jjnewStateCnt++] = 16;
186 | break;
187 | case 18:
188 | if (curChar == 33 && kind > 20)
189 | kind = 20;
190 | break;
191 | default : break;
192 | }
193 | } while(i != startsAt);
194 | }
195 | else if (curChar < 128)
196 | {
197 | long l = 1L << (curChar & 077);
198 | do
199 | {
200 | switch(jjstateSet[--i])
201 | {
202 | case 1:
203 | if ((0x7fffffe87fffffeL & l) != 0L)
204 | {
205 | if (kind > 9)
206 | kind = 9;
207 | jjCheckNAdd(14);
208 | }
209 | else if (curChar == 126)
210 | {
211 | if (kind > 20)
212 | kind = 20;
213 | }
214 | if (curChar == 84)
215 | jjAddStates(0, 1);
216 | else if (curChar == 70)
217 | jjAddStates(2, 3);
218 | else if (curChar == 102)
219 | jjstateSet[jjnewStateCnt++] = 11;
220 | else if (curChar == 116)
221 | jjstateSet[jjnewStateCnt++] = 6;
222 | break;
223 | case 2:
224 | if ((0xffffffffefffffffL & l) != 0L)
225 | jjAddStates(4, 5);
226 | break;
227 | case 4:
228 | if (curChar == 101 && kind > 7)
229 | kind = 7;
230 | break;
231 | case 5:
232 | case 31:
233 | if (curChar == 117)
234 | jjCheckNAdd(4);
235 | break;
236 | case 6:
237 | if (curChar == 114)
238 | jjstateSet[jjnewStateCnt++] = 5;
239 | break;
240 | case 7:
241 | if (curChar == 116)
242 | jjstateSet[jjnewStateCnt++] = 6;
243 | break;
244 | case 8:
245 | if (curChar == 101 && kind > 8)
246 | kind = 8;
247 | break;
248 | case 9:
249 | case 24:
250 | if (curChar == 115)
251 | jjCheckNAdd(8);
252 | break;
253 | case 10:
254 | if (curChar == 108)
255 | jjstateSet[jjnewStateCnt++] = 9;
256 | break;
257 | case 11:
258 | if (curChar == 97)
259 | jjstateSet[jjnewStateCnt++] = 10;
260 | break;
261 | case 12:
262 | if (curChar == 102)
263 | jjstateSet[jjnewStateCnt++] = 11;
264 | break;
265 | case 13:
266 | case 14:
267 | if ((0x7fffffe87fffffeL & l) == 0L)
268 | break;
269 | if (kind > 9)
270 | kind = 9;
271 | jjCheckNAdd(14);
272 | break;
273 | case 18:
274 | if (curChar == 126 && kind > 20)
275 | kind = 20;
276 | break;
277 | case 19:
278 | if (curChar == 70)
279 | jjAddStates(2, 3);
280 | break;
281 | case 20:
282 | if (curChar == 69 && kind > 8)
283 | kind = 8;
284 | break;
285 | case 21:
286 | if (curChar == 83)
287 | jjstateSet[jjnewStateCnt++] = 20;
288 | break;
289 | case 22:
290 | if (curChar == 76)
291 | jjstateSet[jjnewStateCnt++] = 21;
292 | break;
293 | case 23:
294 | if (curChar == 65)
295 | jjstateSet[jjnewStateCnt++] = 22;
296 | break;
297 | case 25:
298 | if (curChar == 108)
299 | jjstateSet[jjnewStateCnt++] = 24;
300 | break;
301 | case 26:
302 | if (curChar == 97)
303 | jjstateSet[jjnewStateCnt++] = 25;
304 | break;
305 | case 27:
306 | if (curChar == 84)
307 | jjAddStates(0, 1);
308 | break;
309 | case 28:
310 | if (curChar == 69 && kind > 7)
311 | kind = 7;
312 | break;
313 | case 29:
314 | if (curChar == 85)
315 | jjstateSet[jjnewStateCnt++] = 28;
316 | break;
317 | case 30:
318 | if (curChar == 82)
319 | jjstateSet[jjnewStateCnt++] = 29;
320 | break;
321 | case 32:
322 | if (curChar == 114)
323 | jjstateSet[jjnewStateCnt++] = 31;
324 | break;
325 | default : break;
326 | }
327 | } while(i != startsAt);
328 | }
329 | else
330 | {
331 | int i2 = (curChar & 0xff) >> 6;
332 | long l2 = 1L << (curChar & 077);
333 | do
334 | {
335 | switch(jjstateSet[--i])
336 | {
337 | case 2:
338 | if ((jjbitVec0[i2] & l2) != 0L)
339 | jjAddStates(4, 5);
340 | break;
341 | default : break;
342 | }
343 | } while(i != startsAt);
344 | }
345 | if (kind != 0x7fffffff)
346 | {
347 | jjmatchedKind = kind;
348 | jjmatchedPos = curPos;
349 | kind = 0x7fffffff;
350 | }
351 | ++curPos;
352 | if ((i = jjnewStateCnt) == (startsAt = 33 - (jjnewStateCnt = startsAt)))
353 | return curPos;
354 | try { curChar = input_stream.readChar(); }
355 | catch(java.io.IOException e) { return curPos; }
356 | }
357 | }
358 | static final int[] jjnextStates = {
359 | 30, 32, 23, 26, 2, 3,
360 | };
361 |
362 | /** Token literal values. */
363 | public static final String[] jjstrLiteralImages = {
364 | "", null, null, null, null, null, null, null, null, null, null, null, null,
365 | "\76", "\74", "\74\75", "\76\75", "\41\75", "\46\46", "\174\174", null, "\75\76",
366 | "\53", "\55", "\52", "\57", "\45", "\50", "\51", };
367 |
368 | /** Lexer state names. */
369 | public static final String[] lexStateNames = {
370 | "DEFAULT",
371 | };
372 | static final long[] jjtoToken = {
373 | 0x1ffff3e1L,
374 | };
375 | static final long[] jjtoSkip = {
376 | 0x1eL,
377 | };
378 | protected SimpleCharStream input_stream;
379 | private final int[] jjrounds = new int[33];
380 | private final int[] jjstateSet = new int[66];
381 | protected char curChar;
382 | /** Constructor. */
383 | public ConstraintParserTokenManager(SimpleCharStream stream){
384 | if (SimpleCharStream.staticFlag)
385 | throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
386 | input_stream = stream;
387 | }
388 |
389 | /** Constructor. */
390 | public ConstraintParserTokenManager(SimpleCharStream stream, int lexState){
391 | this(stream);
392 | SwitchTo(lexState);
393 | }
394 |
395 | /** Reinitialise parser. */
396 | public void ReInit(SimpleCharStream stream)
397 | {
398 | jjmatchedPos = jjnewStateCnt = 0;
399 | curLexState = defaultLexState;
400 | input_stream = stream;
401 | ReInitRounds();
402 | }
403 | private void ReInitRounds()
404 | {
405 | int i;
406 | jjround = 0x80000001;
407 | for (i = 33; i-- > 0;)
408 | jjrounds[i] = 0x80000000;
409 | }
410 |
411 | /** Reinitialise parser. */
412 | public void ReInit(SimpleCharStream stream, int lexState)
413 | {
414 | ReInit(stream);
415 | SwitchTo(lexState);
416 | }
417 |
418 | /** Switch to specified lex state. */
419 | public void SwitchTo(int lexState)
420 | {
421 | if (lexState >= 1 || lexState < 0)
422 | throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
423 | else
424 | curLexState = lexState;
425 | }
426 |
427 | protected Token jjFillToken()
428 | {
429 | final Token t;
430 | final String curTokenImage;
431 | final int beginLine;
432 | final int endLine;
433 | final int beginColumn;
434 | final int endColumn;
435 | String im = jjstrLiteralImages[jjmatchedKind];
436 | curTokenImage = (im == null) ? input_stream.GetImage() : im;
437 | beginLine = input_stream.getBeginLine();
438 | beginColumn = input_stream.getBeginColumn();
439 | endLine = input_stream.getEndLine();
440 | endColumn = input_stream.getEndColumn();
441 | t = Token.newToken(jjmatchedKind, curTokenImage);
442 |
443 | t.beginLine = beginLine;
444 | t.endLine = endLine;
445 | t.beginColumn = beginColumn;
446 | t.endColumn = endColumn;
447 |
448 | return t;
449 | }
450 |
451 | int curLexState = 0;
452 | int defaultLexState = 0;
453 | int jjnewStateCnt;
454 | int jjround;
455 | int jjmatchedPos;
456 | int jjmatchedKind;
457 |
458 | /** Get the next Token. */
459 | public Token getNextToken()
460 | {
461 | Token matchedToken;
462 | int curPos = 0;
463 |
464 | EOFLoop :
465 | for (;;)
466 | {
467 | try
468 | {
469 | curChar = input_stream.BeginToken();
470 | }
471 | catch(java.io.IOException e)
472 | {
473 | jjmatchedKind = 0;
474 | matchedToken = jjFillToken();
475 | return matchedToken;
476 | }
477 |
478 | try { input_stream.backup(0);
479 | while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L)
480 | curChar = input_stream.BeginToken();
481 | }
482 | catch (java.io.IOException e1) { continue EOFLoop; }
483 | jjmatchedKind = 0x7fffffff;
484 | jjmatchedPos = 0;
485 | curPos = jjMoveStringLiteralDfa0_0();
486 | if (jjmatchedKind != 0x7fffffff)
487 | {
488 | if (jjmatchedPos + 1 < curPos)
489 | input_stream.backup(curPos - jjmatchedPos - 1);
490 | if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
491 | {
492 | matchedToken = jjFillToken();
493 | return matchedToken;
494 | }
495 | else
496 | {
497 | continue EOFLoop;
498 | }
499 | }
500 | int error_line = input_stream.getEndLine();
501 | int error_column = input_stream.getEndColumn();
502 | String error_after = null;
503 | boolean EOFSeen = false;
504 | try { input_stream.readChar(); input_stream.backup(1); }
505 | catch (java.io.IOException e1) {
506 | EOFSeen = true;
507 | error_after = curPos <= 1 ? "" : input_stream.GetImage();
508 | if (curChar == '\n' || curChar == '\r') {
509 | error_line++;
510 | error_column = 0;
511 | }
512 | else
513 | error_column++;
514 | }
515 | if (!EOFSeen) {
516 | input_stream.backup(1);
517 | error_after = curPos <= 1 ? "" : input_stream.GetImage();
518 | }
519 | throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
520 | }
521 | }
522 |
523 | private void jjCheckNAdd(int state)
524 | {
525 | if (jjrounds[state] != jjround)
526 | {
527 | jjstateSet[jjnewStateCnt++] = state;
528 | jjrounds[state] = jjround;
529 | }
530 | }
531 | private void jjAddStates(int start, int end)
532 | {
533 | do {
534 | jjstateSet[jjnewStateCnt++] = jjnextStates[start];
535 | } while (start++ != end);
536 | }
537 | private void jjCheckNAddTwoStates(int state1, int state2)
538 | {
539 | jjCheckNAdd(state1);
540 | jjCheckNAdd(state2);
541 | }
542 |
543 | }
544 |
--------------------------------------------------------------------------------
/CCM Command Line Tool/CCMCL/src/com/nist/ccmcl/Parameter.java:
--------------------------------------------------------------------------------
1 | package com.nist.ccmcl;
2 |
3 | import java.util.ArrayList;
4 |
5 |
6 | public class Parameter
7 | {
8 |
9 | //types
10 | /**
11 | * Indicates an integer parameter
12 | */
13 | public static final int PARAM_TYPE_INT = 0;
14 |
15 | /**
16 | * Indicates an parameter
17 | */
18 | public static final int PARAM_TYPE_ENUM = 1;
19 |
20 | /**
21 | * indicates a boolean parameter
22 | */
23 | public static final int PARAM_TYPE_BOOL = 2;
24 |
25 | private String _name;
26 | private int _type;
27 | private ArrayList _values;
28 | private ArrayList _realValues;
29 | private ArrayList _bound;
30 | private ArrayList