그래프가있는 클래스가 있습니다. 그래프를 반복하고 그래프를 만드는 문자열을 만든 다음 해당 문자열을 Java 파일에 씁니다. 더 좋은 방법이 있나요, 나는 JDT와 CodeModel에 대해 읽었지만, 실제로 어떻게 사용하는지에 대한 힌트가 필요합니다.Java에서 코드 생성기의 더 좋은 방법은 무엇입니까?
편집
나는 정규 표현식 코드 생성기를하고있는 중이 야 지금까지 나는 DFA로 정규 표현식은 (성배 라이브러리를 사용하여) directedgraph 표현 변환했다. DFA를 사용할 때 다음 단계는 세 가지 방법이있는 클래스를 생성하는 것입니다. 첫 번째 방법은 동일한 그래프 (DFA)를 작성하고 두 번째 방법은 한 노드에서 다른 노드로 이동하며 세 번째 방법은 입력 문자열이 받아 들여지면 일치시킵니다. 첫 번째 메소드 만이 regularexpression 입력에 따라 변경되며 다른 두 메소드는 정적이며 각 생성 된 Java 클래스에 대해 동일합니다. 몇 가지 제안 아직도
import grail.interfaces.DirectedEdgeInterface;
import grail.interfaces.DirectedGraphInterface;
import grail.interfaces.DirectedNodeInterface;
import grail.interfaces.EdgeInterface;
import grail.iterators.EdgeIterator;
import grail.iterators.NodeIterator;
import grail.properties.GraphProperties;
import grail.setbased.SetBasedDirectedGraph;
public class ClassName {
private SetBasedDirectedGraph graph = new SetBasedDirectedGraph();
private static DirectedNodeInterface state;
private static DirectedNodeInterface currentState;
protected DirectedEdgeInterface edge;
public ClassName() {
buildGraph();
}
protected void buildGraph() {
// Creating Graph Nodes (Automaton States)
state = graph.createNode(3);
state.setProperty(GraphProperties.LABEL, "3");
state.setProperty(GraphProperties.DESCRIPTION, "null");
graph.addNode(state);
state = graph.createNode(2);
state.setProperty(GraphProperties.LABEL, "2");
state.setProperty(GraphProperties.DESCRIPTION, "null");
graph.addNode(state);
state = graph.createNode(1);
state.setProperty(GraphProperties.LABEL, "1");
state.setProperty(GraphProperties.DESCRIPTION, "Accepted");
graph.addNode(state);
state = graph.createNode(0);
state.setProperty(GraphProperties.LABEL, "0");
state.setProperty(GraphProperties.DESCRIPTION, "Initial");
graph.addNode(state);
.....
// Creating Graph Edges (Automaton Transitions)
edge = graph.createEdge(null, (DirectedNodeInterface) graph.getNode(2),
(DirectedNodeInterface) graph.getNode(1));
edge.setProperty((GraphProperties.LABEL), "0");
graph.addEdge(edge);
edge = graph.createEdge(null, (DirectedNodeInterface) graph.getNode(2),
(DirectedNodeInterface) graph.getNode(2));
edge.setProperty((GraphProperties.LABEL), "1");
graph.addEdge(edge);
edge = graph.createEdge(null, (DirectedNodeInterface) graph.getNode(1),
(DirectedNodeInterface) graph.getNode(1));
edge.setProperty((GraphProperties.LABEL), "0");
graph.addEdge(edge);
edge = graph.createEdge(null, (DirectedNodeInterface) graph.getNode(1),
(DirectedNodeInterface) graph.getNode(3));
edge.setProperty((GraphProperties.LABEL), "1");
graph.addEdge(edge);
edge = graph.createEdge(null, (DirectedNodeInterface) graph.getNode(0),
(DirectedNodeInterface) graph.getNode(1));
edge.setProperty((GraphProperties.LABEL), "0");
graph.addEdge(edge);
edge = graph.createEdge(null, (DirectedNodeInterface) graph.getNode(0),
(DirectedNodeInterface) graph.getNode(2));
edge.setProperty((GraphProperties.LABEL), "1");
graph.addEdge(edge);
}
}
더 자세한 정보가 필요합니다. '그래프 반복'의 의미는 무엇입니까? – dfb
이 그래프 유형에 대해 이야기하고 있습니까? http://en.wikipedia.org/wiki/Graph_%28mathematics%29 – eabraham
수정 된 기사 읽기[email protected] 예 그것은 지시 된 것을 제외하고는 그러한 그래프입니다 – sm13294