-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFDATest.java
More file actions
82 lines (59 loc) · 2.77 KB
/
Copy pathFDATest.java
File metadata and controls
82 lines (59 loc) · 2.77 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
package FDATest;
import FDA.FDA;
import FDA.*;
import Tools.CharacterIterator;
import java.util.List;
public class FDATest {
static int cont =-1;
static String analyze;
static int sizeCounter = 0;
public static void main(String[]args){
CharacterIterator it = new CharacterIterator("files/javascript.txt");
// Scanner sc = new Scanner(System.in);
//analyze = sc.nextLine();
//analyze = analyze+"\\";
// Iterator<Character> a =analyze.chars().mapToObj(i -> (char)i).iterator();
FDA<Character>fda = new FDA<Character>() {
@Override
public void onReadSequence(FinalState<Character> finalState, List<Character> readSequence) {
sizeCounter = 0;
}
};
fda.setDebug(true);
//creamos nodos
State<Character> initial = new State<Character>("root");
State<Character> nodeAsig1 = new State<Character>(":");
nodeAsig1.setNoTransitionError("Assignments must be :=");
FinalState<Character> nodeAsig2 = new FinalState<Character>("=");
initial.addTransition(':',nodeAsig1,false,true);
nodeAsig1.addTransition('=',nodeAsig2,false,true);
FinalState<Character> sum = new FinalState<Character>("+");
initial.addTransition('+',sum,false,true);
State<Character> letterDigit = new State<Character>("letter");
Transition<Character> transition = initial.addTransitionFunction(TransitionFunction::isLetter,letterDigit,false,true);
transition.addSemanticAction(new SemanticAction<Character>() {
@Override
public void onAction(State<Character> state, Character element, List<Character> sequence){
}
});
Transition<Character> transition2=letterDigit.addTransitionFunction(TransitionFunction::isLetterDigit,letterDigit,false,true);
transition2.addSemanticAction(new SemanticAction<Character>() {
@Override
public void onAction(State<Character> state, Character element, List<Character> sequence) throws FDAException {
//System.out.print(sequence);
if(sequence.size()>5){
throw new FDAException(-3,"Variables must be max size of 5");
}
}
});
FinalState<Character> variable = new FinalState<Character>("variable");
letterDigit.addOtherElementTransitionFunction(variable,true,true);
FinalState<Character> eof = new FinalState<Character>("eof");
initial.addTransition('\\',eof,false,false);
initial.addTransitionFunction(TransitionFunction::isDelimiter,initial,false,false);
//Console.printLegend();
fda.setRoot(initial);
fda.setIterator(it);
fda.execute(fda.getIterator());
}
}