private List <RegionResult> GetRegionBlocks() { var result = new List <RegionResult>(); while (true) { RegionResult region; switch (_current.Token) { case Token.Eof: return(result); case Token.Do: // do-while has two blocks region = ParseBlock(); _current = _lexer.GetToken(); if (_current.Token == Token.While) { var whileRegion = ParseBlock(); var doWhile = region.Combine(whileRegion); result.Add(doWhile); _current = _lexer.GetToken(); break; } result.Add(region); break; default: region = ParseBlock(); result.Add(region); _current = _lexer.GetToken(); break; } } }
public void ShouldReturnTokenRegion() { const string Code = " id<T> "; var lexer = new ScriptLexer(Code); var result = lexer.GetToken(); result.Start.ShouldEqual(1); result.End.ShouldEqual(3); result = lexer.GetToken(); //< result.Start.ShouldEqual(3); result.End.ShouldEqual(4); }
public void ShouldRemoveMultiLineComments() { const string Code = " { /* This is \n removed */ } "; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual('{'); token = lexer.GetToken(); token.Token.ShouldEqual('}'); token = lexer.GetToken(); token.Token.ShouldEqual(Token.Eof); }
public void ShouldRemoveSingleLineComments() { const string Code = " { // This is removed \n } "; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual('{'); token = lexer.GetToken(); token.Token.ShouldEqual('}'); token = lexer.GetToken(); token.Token.ShouldEqual(Token.Eof); }
public void ShouldIdentifyRightParentheseAsToken() { const string Code = " ) "; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.RightParenthese); }
public void ShouldIdentifyRightBracketAsToken() { const string Code = " } "; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.RightBracket); }
public void ShouldIdentifySemiColonAsToken() { const string Code = " ; "; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.SemiColon); }
public void ShouldIdentifyUnlexedAsThemselves() { const string Code = " < "; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual('<'); }
public void ShouldIdentifyWhileAsToken() { const string Code = "while(true); "; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.While); token.TokenValue.ShouldEqual("while"); }
public void ShouldIdentifyIdentifiersAsToken() { const string Code = " id "; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.Identifier); token.TokenValue.ShouldEqual("id"); }
public void ShouldIdentifyStringsWithEscapeChars() { const string Code = "\"AssemblyInformationalVersion(\\\"\""; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.String); token.TokenValue.ShouldEqual(Code); }
public void ShouldIdentifyEmptyStrings() { const string Code = "\"\""; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.String); token.Start.ShouldEqual(0); token.End.ShouldEqual(2); token.TokenValue.ShouldEqual(Code); }
public void ShouldNotFailOnIdentifyingCharactersAsToken() { const string Code = "\'A"; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.Character); token.Start.ShouldEqual(0); token.End.ShouldEqual(2); token.TokenValue.ShouldEqual(Code); }
public void ShouldIdentifyEscapeSequencesInCharacterLiterals() { const string Code = "\'\\t\'"; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.Character); token.Start.ShouldEqual(0); token.End.ShouldEqual(4); token.TokenValue.ShouldEqual(Code); }
public void ShouldIdenityCharactersAsToken() { const string Code = "\'A\'"; var lexer = new ScriptLexer(Code); var token = lexer.GetToken(); token.Token.ShouldEqual(Token.Character); token.Start.ShouldEqual(0); token.End.ShouldEqual(3); token.TokenValue.ShouldEqual(Code); }
public List <RegionResult> Parse(string code) { _lexer = new ScriptLexer(code); _current = _lexer.GetToken(); return(GetRegionBlocks()); }