private void SkipSpacesAndComments(ParseIterator iterator) { while (true) { /* Пропускаем все пробелы и комментарии */ iterator.SkipSpaces(); if (iterator.CurrentSymbol == '/') { if (!iterator.MoveNext()) { throw CreateExceptionOnCurrentLine("Некорректный символ", iterator); } if (iterator.CurrentSymbol != '/') { throw CreateExceptionOnCurrentLine("Некорректный символ", iterator); } do { if (!iterator.MoveNext()) { break; } } while (iterator.CurrentSymbol != '\n'); } else { break; } } }
private void SkipSpacesAndComments(ParseIterator iterator) { while (true) { /* Пропускаем все пробелы и комментарии */ iterator.SkipSpaces(); if (iterator.CurrentSymbol == '/') { if (!iterator.MoveNext()) throw CreateExceptionOnCurrentLine("Некорректный символ", iterator); if (iterator.CurrentSymbol != '/') throw CreateExceptionOnCurrentLine("Некорректный символ", iterator); do { if (!iterator.MoveNext()) break; } while (iterator.CurrentSymbol != '\n'); } else break; } }
public override Lexem ReadNextLexem(ParseIterator iterator) { bool isEndOfText = false; Char cs = '\0'; while (true) { if (!isEndOfText) { cs = iterator.CurrentSymbol; } if (SpecialChars.IsDelimiter(cs) || isEndOfText) { var content = iterator.GetContents().content; Lexem lex; if(_booleanOperators.Contains(content)) { lex = new Lexem() { Type = LexemType.Operator, Token = LanguageDef.GetToken(content), Content = content }; } else if (_booleanLiterals.Contains(content)) { lex = new Lexem() { Type = LexemType.BooleanLiteral, Content = content }; } else if (_undefined.Contains(content)) { lex = new Lexem() { Type = LexemType.UndefinedLiteral, Content = content }; } else if (String.Compare(content, "null", true) == 0) { lex = new Lexem() { Type = LexemType.NullLiteral, Content = content }; } else { lex = new Lexem() { Type = LexemType.Identifier, Content = content, Token = LanguageDef.GetToken(content) }; if (LanguageDef.IsBuiltInFunction(lex.Token)) { iterator.SkipSpaces(); if (iterator.CurrentSymbol != '(') { lex.Token = Token.NotAToken; } } } return lex; } if (!iterator.MoveNext()) { if (isEndOfText) { break; } else { isEndOfText = true; } } } return Lexem.Empty(); }
public override Lexem ReadNextLexem(ParseIterator iterator) { bool isEndOfText = false; Char cs = '\0'; while (true) { if (!isEndOfText) { cs = iterator.CurrentSymbol; } if (SpecialChars.IsDelimiter(cs) || isEndOfText) { var content = iterator.GetContents().content; Lexem lex; if (_booleanOperators.Contains(content)) { lex = new Lexem() { Type = LexemType.Operator, Token = LanguageDef.GetToken(content), Content = content }; } else if (_booleanLiterals.Contains(content)) { lex = new Lexem() { Type = LexemType.BooleanLiteral, Content = content }; } else if (_undefined.Contains(content)) { lex = new Lexem() { Type = LexemType.UndefinedLiteral, Content = content }; } else if (String.Compare(content, "null", true) == 0) { lex = new Lexem() { Type = LexemType.NullLiteral, Content = content }; } else { lex = new Lexem() { Type = LexemType.Identifier, Content = content, Token = LanguageDef.GetToken(content) }; if (LanguageDef.IsBuiltInFunction(lex.Token)) { iterator.SkipSpaces(); if (iterator.CurrentSymbol != '(') { lex.Token = Token.NotAToken; } } } return(lex); } if (!iterator.MoveNext()) { if (isEndOfText) { break; } else { isEndOfText = true; } } } return(Lexem.Empty()); }