55import cn .alumik .parsetree .lexer .fsm .DFA ;
66import cn .alumik .parsetree .lexer .fsm .FSMState ;
77import cn .alumik .parsetree .lexer .fsm .NFA ;
8+ import cn .alumik .parsetree .parser .Parser ;
89import cn .alumik .parsetree .symbol .TerminalSymbol ;
910import cn .alumik .parsetree .util .Config ;
1011
@@ -14,14 +15,17 @@ public class Lexer {
1415
1516 private final Config mConfig ;
1617
18+ private final Parser mParser ;
19+
1720 private DFA mDfa ;
1821
1922 private Map <String , String > mAcceptingRules = new LinkedHashMap <>();
2023
2124 private Set <String > mIgnoredSymbols = new HashSet <>();
2225
23- public Lexer (Config config ) throws AnalysisException , ParsingException {
26+ public Lexer (Config config , Parser parser ) throws AnalysisException , ParsingException {
2427 mConfig = config ;
28+ mParser = parser ;
2529 initAcceptingRules ();
2630 initDFA ();
2731 }
@@ -38,11 +42,7 @@ public void setAcceptingRule(Map<String, String> acceptingRules) {
3842 mAcceptingRules = acceptingRules ;
3943 }
4044
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 {
4646 final List <TerminalSymbol > lexResult = new ArrayList <>();
4747 final StringBuilder stringBuilder = new StringBuilder (input );
4848 while (stringBuilder .length () != 0 ) {
@@ -53,7 +53,9 @@ public List<TerminalSymbol> lex(String input) throws ParsingException {
5353 if (!mIgnoredSymbols .contains (result .getKey ())) {
5454 final String value = stringBuilder .substring (0 , result .getValue ());
5555 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 );
5759 lexResult .add (terminalSymbol );
5860 }
5961 stringBuilder .delete (0 , result .getValue ());
0 commit comments