private LexicalAnalyzer setLines(LexicalAnalyzer lex) { for (int ctr = 0; ctr < lex.tokens.Count; ctr++) { for (int i = 0; i < lex.linetokens.Count; i++) { if (ctr + 1 <= lex.linetokens[i]) { lex.tokens[ctr].setLines(i + 1); break; } } } return(lex); }
public LexicalAnalyzer Start(string code, LexicalAnalyzer lex) { Tokens t = new Tokens(); while (!code.Equals("")) { if (lex.isSpace(code, toks)) { code = code.Remove(0, lex.ctra); toks--; } else if (lex.ReservedWords(code)) { code = code.Remove(0, lex.ctra); } else if (lex.Comment(code)) { code = code.Remove(0, lex.ctra); } else if (lex.ReservedSymbols(code)) { code = code.Remove(0, lex.ctra); } else if (lex.hasLiterals(code)) { code = code.Remove(0, lex.ctra); } else if (lex.hasIdentifier(code)) { code = code.Remove(0, lex.ctra); } else { t = new Tokens(); if (lex.choice != 0) { switch (lex.choice) { case 1: lex.ctra = GetCtr(code, 1); break; } } if (lex.ctra == 0 && code.Length != 1) { lex.ctra = GetCtr(code); } else if (lex.ctra == 0 && code.Length == 1) { lex.ctra = 1; } else if (lex.ctra >= code.Length) { lex.ctra = code.Length; } t.setTokens("INVALID"); t.setLexemes(code.Substring(0, lex.ctra)); lex.tokens.Add(t); code = code.Remove(0, lex.ctra); } toks++; } lex.linetokens.Add(toks); lex = setLines(lex); return(lex); }
//INITIALIZATION public LexicalAnalyzer InitializeAnalyzer(string txt, LexicalAnalyzer lex) { Boolean hastoken = false; Tokens t = new Tokens(); //txt = txt.TrimStart(); lex.token.Clear(); lex.invalid = 0; lex.valid = 0; while (txt != "") { if (hastoken = lex.GetTokenLines(txt, tokens)) { txt = txt.Remove(0, lex.ctr); tokens--; } else if (hastoken = lex.GetReservedWords(txt)) { txt = txt.Remove(0, lex.ctr); } else if (hastoken = lex.GetReservedSymbols(txt)) { txt = txt.Remove(0, lex.ctr); } else if (hastoken = lex.GetLiterals(txt)) { txt = txt.Remove(0, lex.ctr); } else if (hastoken = lex.GetIdentifiers(txt)) { txt = txt.Remove(0, lex.ctr); } else { t = new Tokens(); lex.invalid++; // lex.token.Add("INVALID"); if (lex.state != 0) { switch (lex.state) { case 1: lex.ctr = GetCtr(txt, 1); break; } } if (lex.ctr == 0 && txt.Length != 1) { lex.ctr = GetCtr(txt); } else if (lex.ctr == 0 && txt.Length == 1) { lex.ctr = 1; } else if (lex.ctr >= txt.Length) { lex.ctr = txt.Length; } t.setTokens("INVALID"); t.setLexemes(txt.Substring(0, lex.ctr)); lex.token.Add(t); txt = txt.Remove(0, lex.ctr); } tokens++; //txt = txt.TrimStart(); } lex.linetokens.Add(tokens); lex = setLines(lex); return(lex); }