KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gov > nasa > ltl > graph > Generate


1
2 //
3
// Copyright (C) 2005 United States Government as represented by the
4
// Administrator of the National Aeronautics and Space Administration
5
// (NASA). All Rights Reserved.
6
//
7
// This software is distributed under the NASA Open Source Agreement
8
// (NOSA), version 1.3. The NOSA has been approved by the Open Source
9
// Initiative. See the file NOSA-1.3-JPF at the top of the distribution
10
// directory tree for the complete NOSA document.
11
//
12
// THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY
13
// KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
14
// LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
15
// SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
16
// A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT
17
// THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT
18
// DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE.
19
//
20
package gov.nasa.ltl.graph;
21
22 /**
23  * DOCUMENT ME!
24  */

25 public class Generate {
26   public static Graph generate (int nsets) {
27     // nsets is number of accepting conditions
28
// nnodes is number of nodes in automaton generated - numbered from 0
29
int nnodes = nsets + 1;
30
31     Node[] nodes = new Node[nnodes];
32     Graph g = new Graph();
33
34     g.setIntAttribute("nsets", nsets);
35     g.setStringAttribute("type", "ba");
36     g.setStringAttribute("ac", "nodes");
37
38     for (int i = 0; i < nnodes; i++) {
39       nodes[i] = new Node(g);
40
41       StringBuffer JavaDoc label = new StringBuffer JavaDoc();
42
43       for (int k = 0; k < i; k++) {
44         label.append("acc" + k + "+");
45       }
46
47       nodes[i].setStringAttribute("label", label.toString());
48     }
49
50     Node n;
51
52     // careful- generating edges acc/ding to which is to be explored first
53
// corrected by Dimitra
54
for (int i = 0; i < nsets; i++) {
55       n = nodes[i];
56
57       for (int j = nsets; j > i; j--) {
58         Edge e = new Edge(nodes[i], nodes[j], "-", "-", null);
59
60         for (int k = i; k < j; k++) {
61           e.setBooleanAttribute("acc" + k, true);
62         }
63       }
64
65       Edge e = new Edge(nodes[i], nodes[i], "-", "-", null);
66       e.setBooleanAttribute("else", true);
67     }
68
69
70     // now the last node
71
n = nodes[nnodes - 1];
72     n.setBooleanAttribute("accepting", true);
73
74     Edge e = new Edge(n, n, "-", "-", null);
75
76     for (int k = 0; k < nsets; k++) {
77       e.setBooleanAttribute("acc" + k, true);
78     }
79
80     for (int i = nsets - 1; i >= 0; i--) {
81       e = new Edge(n, nodes[i], "-", "-", null);
82
83       if (i == 0) {
84         e.setBooleanAttribute("else", true);
85       } else {
86         for (int k = 0; k < i; k++) {
87           e.setBooleanAttribute("acc" + k, true);
88         }
89       }
90     }
91
92     g.setInit(n);
93
94     // g.setInit(nodes[0]);
95
return g;
96   }
97
98   public static void main (String JavaDoc[] args) {
99     Graph g = generate(5);
100
101     g.save(Graph.FSP_FORMAT);
102   }
103
104   /*
105      public static void main(String[] args) {
106        Graph g = generate(Integer.parseInt(args[0]));
107        
108        g.save();
109      }
110    */

111 }
Popular Tags