-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFDA.java
More file actions
113 lines (91 loc) · 2.86 KB
/
Copy pathFDA.java
File metadata and controls
113 lines (91 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package FDA;
import Common.ErrorHandler;
import Tools.Console;
import Tools.FileIterator;
import java.util.ArrayList;
import java.util.List;
public abstract class FDA<T>{
private State<T> root;
private boolean debug = false;
private FileIterator<T> iterator;
private FDAData<T>previousData;
private boolean continueOnError = true;
public abstract void onReadSequence(FinalState<T>finalState, List<T> readSequence);
public State<T> getRoot() {
return root;
}
public void setRoot(State<T> root) {
this.root = root;
}
public boolean isDebug() {
return debug;
}
public void setDebug(boolean debug) {
this.debug = debug;
}
public void execute(FileIterator<T> iterator){
this.iterator = iterator;
if(debug){
Console.printLegend();
}
Console.printlnInfo("FDA","Executing");
do{}while(executeNext());
}
public boolean executeNext(){
if(previousData==null){
if(iterator.hasNext()){
previousData = root.feedForward(this,null,new ArrayList<>(),null,debug);
}else{
return false;
}
}else{
if((iterator.hasNext()||!previousData.getLastTransition().isReadNext())&& previousData.getInternalCode()>0){
previousData = root.feedForward(this,previousData.getLastTransition(),new ArrayList<>(),previousData.getLastElement(),debug);
}else{
return false;
}
}
if(previousData.getInternalCode()>0){
return true;
}else{
return false;
}
}
protected boolean onError(ProcessorError exception){
printOnFinish(debug,false,iterator.getCurrentElement().toString());
ErrorHandler.showLexicError(getIterator(),exception);
if(continueOnError){
try {
getIterator().skipLine();
if(debug)Console.print(Console.ANSI_RED+"[Skipped line]");
return true;
}catch(Exception e){
return false;
}
}else{
return false;
}
}
protected void printOnFinish(boolean debug, boolean valid, String value){
if(debug){
if(valid){
Console.print(Console.ANSI_GREEN+"VALID\n");
}else{
Console.printCharacter(true,value);
Console.print(Console.ANSI_RED+"ERROR\n");
}
}
}
public FileIterator<T> getIterator() {
return iterator;
}
public void setIterator(FileIterator<T> iterator) {
this.iterator = iterator;
}
public boolean isContinueOnError() {
return continueOnError;
}
public void setContinueOnError(boolean continueOnError) {
this.continueOnError = continueOnError;
}
}