5
5
import cn .alumik .parsetree .lexer .fsm .DFA ;
6
6
import cn .alumik .parsetree .lexer .fsm .FSMState ;
7
7
import cn .alumik .parsetree .lexer .fsm .NFA ;
8
+ import cn .alumik .parsetree .parser .Parser ;
8
9
import cn .alumik .parsetree .symbol .TerminalSymbol ;
9
10
import cn .alumik .parsetree .util .Config ;
10
11
@@ -14,14 +15,17 @@ public class Lexer {
14
15
15
16
private final Config mConfig ;
16
17
18
+ private final Parser mParser ;
19
+
17
20
private DFA mDfa ;
18
21
19
22
private Map <String , String > mAcceptingRules = new LinkedHashMap <>();
20
23
21
24
private Set <String > mIgnoredSymbols = new HashSet <>();
22
25
23
- public Lexer (Config config ) throws AnalysisException , ParsingException {
26
+ public Lexer (Config config , Parser parser ) throws AnalysisException , ParsingException {
24
27
mConfig = config ;
28
+ mParser = parser ;
25
29
initAcceptingRules ();
26
30
initDFA ();
27
31
}
@@ -38,11 +42,7 @@ public void setAcceptingRule(Map<String, String> acceptingRules) {
38
42
mAcceptingRules = acceptingRules ;
39
43
}
40
44
41
- public Set <String > getIgnoredSymbols () {
42
- return mIgnoredSymbols ;
43
- }
44
-
45
- public List <TerminalSymbol > lex (String input ) throws ParsingException {
45
+ public List <TerminalSymbol > lex (String input ) throws ParsingException , AnalysisException {
46
46
final List <TerminalSymbol > lexResult = new ArrayList <>();
47
47
final StringBuilder stringBuilder = new StringBuilder (input );
48
48
while (stringBuilder .length () != 0 ) {
@@ -53,7 +53,9 @@ public List<TerminalSymbol> lex(String input) throws ParsingException {
53
53
if (!mIgnoredSymbols .contains (result .getKey ())) {
54
54
final String value = stringBuilder .substring (0 , result .getValue ());
55
55
System .out .println (result .getKey () + ": " + value );
56
- final TerminalSymbol terminalSymbol = new TerminalSymbol (value );
56
+ final TerminalSymbol terminalSymbol = new TerminalSymbol (
57
+ mParser .getGrammar ().getSymbolPool ().getTerminalSymbol (result .getKey ()));
58
+ terminalSymbol .setValue (value );
57
59
lexResult .add (terminalSymbol );
58
60
}
59
61
stringBuilder .delete (0 , result .getValue ());
0 commit comments