public void ParseParenthesisedExpression() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT col1, col2 FROM APMART_FP.ADMIN.FPC_SERVICE svc WHERE (svc.MKT_PROD_CD = 'MOB PT' AND svc.SVC_STAT_CD<> 'C') "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); // Test that a subquery type node was built SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword); Assert.IsTrue(oWhere != null); SyntaxNode oParenthesis = oWhere[0]; Assert.AreEqual(oParenthesis.ExpectedType, SyntaxKind.OpenParenthesisToken); // Test that there is a select keyword in that subquery SyntaxNode oAND = oParenthesis[0]; Assert.AreEqual(oAND.ExpectedType, SyntaxKind.AndKeyword); }
public void ParseSelectColumnAlias() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT col1 AS c2 FROM APSHARE_FPVIEWS..FPC_SERVICE svc "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.IsTrue(oSelect != null); SyntaxNode oColumnList = oSelect[0]; Assert.AreEqual(1, oColumnList.Count); // Should be 1 column Assert.AreEqual(SyntaxKind.ColumnListNode, oColumnList.ExpectedType); SyntaxNode oLiteralColumn = oColumnList[0]; Assert.AreEqual(SyntaxKind.IdentifierTableSymbol, oLiteralColumn.ExpectedType); Assert.AreEqual(typeof(Symbol), oLiteralColumn.GetType()); // Table is the top level then col Assert.AreEqual("c2", ((Symbol)oLiteralColumn).Alias); }
public void ParseStringLiteralColumn() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT 'TEST' FROM APSHARE_FPVIEWS..FPC_SERVICE svc "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.AreNotEqual(null, oSelect); SyntaxNode oColumnList = oSelect[0]; Assert.AreEqual(1, oColumnList.Count); // Should be 1 column Assert.AreEqual(SyntaxKind.ColumnListNode, oColumnList.ExpectedType); SyntaxNode oLiteralColumn = oColumnList[0]; Assert.AreEqual(SyntaxKind.LiteralToken, oLiteralColumn.ExpectedType); }
public void LexCreateTableBasic() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ CREATE TABLE _X AS SELECT * FROM APSHARE_FPVIEWS..FPC_SERVICE svc "); SyntaxParser oParser = new SyntaxParser(oText); // Should be 8 (including 1 for the EOF Token) Assert.IsTrue(oParser.TokenList.Count == 12); // First item should be a CREATE keyword (ignoring all comments which is trivia) Assert.AreEqual(oParser.TokenList[0].ExpectedType, SyntaxKind.CreateKeyword); // _X Assert.AreEqual(oParser.TokenList[1].ExpectedType, SyntaxKind.TableKeyword); // Iden Assert.AreEqual(oParser.TokenList[2].ExpectedType, SyntaxKind.IdentifierToken); // Iden Assert.AreEqual(oParser.TokenList[3].ExpectedType, SyntaxKind.AsKeyword); }
public void ParseBasicJoinTree() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT * FROM APMART_FPVIEWS..FPC_SERVICE svc INNER JOIN APSHARE_FP..WR02052_OMR_BASE omr ON svc.SVC_IDNTY = omr.SVC_IDNTY "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); // Test that a subquery type node was built SyntaxNode oFrom = oTemp.FindFirst(SyntaxKind.FromKeyword); Assert.IsTrue(oFrom != null); SyntaxNode oInnerJoin = oFrom[0]; Assert.AreEqual(3, oInnerJoin.Count); Assert.AreEqual(SyntaxKind.InnerJoinKeyword, oInnerJoin.ExpectedType); // test children are correct Assert.AreEqual(oInnerJoin[0].ExpectedType, SyntaxKind.IdentifierDatabaseSymbol); Assert.AreEqual(oInnerJoin[1].ExpectedType, SyntaxKind.IdentifierDatabaseSymbol); }
public void ParseOnAnd() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT col1, col2 FROM ( SELECT * FROM FPC_SERVICE ) svc INNER JOIN APSHARE_FP..FWR02052_OMR_BASE omr ON svc.MKT_PROD_CD = 'MOB PT' AND svc.SVC_IDNTY = omr.SERVICE_NO "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); // Test that a subquery type node was built SyntaxNode oON = oTemp.FindFirst(SyntaxKind.OnKeyword); Assert.AreNotEqual(oON, null); // Test that there is a select keyword in that subquery SyntaxNode oAND = oON.FindFirst(SyntaxKind.AndKeyword); Assert.AreNotEqual(oAND, null); Assert.AreEqual(oAND.RawSQLText, "AND"); // Test that the AND was generated properly (exactly 2 children) Assert.AreEqual(2, oAND.Count); SyntaxNode oLeftEquals = oAND[0]; Assert.AreEqual(oLeftEquals.ExpectedType, SyntaxKind.EqualsToken); SyntaxNode oLeftEqualsL = oLeftEquals[0]; Assert.AreEqual(oLeftEqualsL.ExpectedType, SyntaxKind.IdentifierTableSymbol); SyntaxNode oLeftEqualsR = oLeftEquals[1]; Assert.AreEqual(oLeftEqualsR.ExpectedType, SyntaxKind.LiteralToken); SyntaxNode oRightEquals = oAND[1]; Assert.AreEqual(oLeftEquals.ExpectedType, SyntaxKind.EqualsToken); SyntaxNode oRightEqualsL = oRightEquals[0]; Assert.AreEqual(oRightEqualsL.ExpectedType, SyntaxKind.IdentifierTableSymbol); SyntaxNode oRightEqualsR = oRightEquals[1]; Assert.AreEqual(oRightEqualsR.ExpectedType, SyntaxKind.IdentifierTableSymbol); }
public void ParseWhereOr() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT col1, col2 FROM ( SELECT * FROM FPC_SERVICE ) svc WHERE svc.MKT_PROD_CD = 'MOB PT' OR svc.SVC_STAT_CD <> 'C' "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); // Test that a subquery type node was built SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword); Assert.IsTrue(oWhere != null); // Test that there is a select keyword in that subquery SyntaxNode oOR = oWhere.FindFirst(SyntaxKind.OrKeyword); Assert.IsTrue(oOR != null); // Test that the OR was generated properly (exactly 2 children) Assert.AreEqual(2, oOR.Count); }
public void ParseBadColumnCommentWHERE() { SlidingTextWindow oText = new SlidingTextWindow( @" SELECT * --bad comment FROM APSHARE_FPVIEWS..FPC_SERVICE svc -- WHERE x "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.AreNotEqual(oSelect, null); SyntaxNode oFrom = oSelect.FindFirst(SyntaxKind.FromKeyword); Assert.AreNotEqual(oFrom, null); SyntaxNode oWhere = oSelect.FindFirst(SyntaxKind.WhereKeyword); Assert.AreEqual(oWhere, null); // Should not be a where, They probably wanted this commented out }
public void ParseComplexColumnConcat() { SlidingTextWindow oText = new SlidingTextWindow( @" SELECT '+61' || SUBSTR(svc_idnty, 1, 8) || '0' FROM FPC_SERVICE "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.AreNotEqual(null, oSelect); Assert.AreEqual(2, oSelect.Count); SyntaxNode oColumnList = oSelect[0]; Assert.AreEqual(1, oColumnList.Count); Assert.AreEqual(SyntaxKind.ColumnListNode, oColumnList.ExpectedType); SyntaxNode oBarBar = oColumnList[0]; Assert.AreEqual(3, oBarBar.Count); Assert.AreEqual(SyntaxKind.BarBarToken, oBarBar.ExpectedType); Assert.AreEqual(SyntaxKind.LiteralToken, oBarBar[0].ExpectedType); Assert.AreEqual(SyntaxKind.SubStringKeyword, oBarBar[1].ExpectedType); Assert.AreEqual(SyntaxKind.LiteralToken, oBarBar[2].ExpectedType); }
public void LexSelectExpression() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT COUNT(*) FROM APSHARE_FPVIEWS..FPC_SERVICE svc "); SyntaxParser oParser = new SyntaxParser(oText); // Should be 8 (including 1 for the EOF Token) Assert.AreEqual(11, oParser.TokenList.Count); // First item should be a select keyword (ignoring all comments which is trivia) Assert.AreEqual(oParser.TokenList[0].ExpectedType, SyntaxKind.SelectKeyword); // COUNT Assert.AreEqual(oParser.TokenList[1].ExpectedType, SyntaxKind.CountKeyword); // ( Assert.AreEqual(oParser.TokenList[2].ExpectedType, SyntaxKind.OpenParenthesisToken); // ( Assert.AreEqual(oParser.TokenList[3].ExpectedType, SyntaxKind.StarToken); // ) Assert.AreEqual(oParser.TokenList[4].ExpectedType, SyntaxKind.CloseParenthesisToken); }
public void ParseBadColumnCommentFROM() { SlidingTextWindow oText = new SlidingTextWindow( @" SELECT * --bad comment FROM APSHARE_FPVIEWS..FPC_SERVICE svc "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.AreNotEqual(oSelect, null); SyntaxNode oFrom = oSelect.FindFirst(SyntaxKind.FromKeyword); Assert.AreNotEqual(oFrom, null); SyntaxNode oTableIdn = oFrom.FindFirst(SyntaxKind.IdentifierTableSymbol); Assert.AreNotEqual(oTableIdn, null); }
public void LexWITHStatementBasic() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ WITH _X AS ( SELECT * FROM APMART_FPVIEWS..FPC_SERVICE LIMIT 100 ) SELECT * FROM APSHARE_FPVIEWS..FPC_SERVICE svc INNER JOIN _X ON _X.SVC_IDNTY = svc.SVC_IDNTY "); SyntaxParser oParser = new SyntaxParser(oText); // WITH Assert.AreEqual(oParser.TokenList[0].ExpectedType, SyntaxKind.WithKeyword); Assert.AreEqual(oParser.TokenList[0].RawSQLText, "WITH"); // Identifier Assert.AreEqual(oParser.TokenList[1].ExpectedType, SyntaxKind.IdentifierToken); Assert.AreEqual(oParser.TokenList[1].RawSQLText, "_X"); // Brackets Assert.AreEqual(oParser.TokenList[3].ExpectedType, SyntaxKind.OpenParenthesisToken); Assert.AreEqual(oParser.TokenList[3].RawSQLText, "("); Assert.AreEqual(oParser.TokenList[12].ExpectedType, SyntaxKind.CloseParenthesisToken); Assert.AreEqual(oParser.TokenList[12].RawSQLText, ")"); }
public void LexINNERJOINStatementBasic() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT * FROM APMART_FPVIEWS..FPC_SERVICE svc INNER JOIN APSHARE_FP..WR02290_FETCH ftch ON svc.SVC_IDNTY = ftch.SERVICE_NO WHERE svc.MKT_PROD_CD = 'A' ; "); SyntaxParser oParser = new SyntaxParser(oText); // Should be 15 (including 1 for the semicolon) Assert.AreEqual(oParser.TokenList.Count, 29); // First item should be a select keyword (ignoring all comments which is trivia) Assert.AreEqual(oParser.TokenList[0].ExpectedType, SyntaxKind.SelectKeyword); // We only really test for the JOIN and its positioning Assert.AreEqual(oParser.TokenList[7].ExpectedType, SyntaxKind.InnerJoinKeyword); Assert.AreEqual(oParser.TokenList[8].ExpectedType, SyntaxKind.JoinKeyword); }
public void ParseAdditionInColumn() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT svc_idnty + 2 FROM APSHARE_FPVIEWS..FPC_SERVICE svc "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.IsTrue(oSelect != null); SyntaxNode oColumnList = oSelect.FindFirst(SyntaxKind.ColumnListNode); Assert.AreNotEqual(oColumnList, null); SyntaxNode oStarExpression = oSelect.FindFirst(SyntaxKind.PlusToken); Assert.AreNotEqual(oStarExpression, null); SyntaxNode oLeft = oStarExpression[0]; SyntaxNode oRight = oStarExpression[1]; Assert.AreEqual(oLeft.ExpectedType, SyntaxKind.IdentifierTableSymbol); Assert.AreEqual(oRight.ExpectedType, SyntaxKind.NumericToken); }
public void ParseBasicWhere() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT col1, col2 FROM ( SELECT * FROM FPC_SERVICE ) svc WHERE svc.MKT_PROD_CD = 'MOB PT' "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); // Test that a subquery type node was built SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword); Assert.IsTrue(oWhere != null); // Test that there is a select keyword in that subquery SyntaxNode oEqual = oWhere.FindFirst(SyntaxKind.EqualsToken); Assert.AreNotEqual(oEqual, null); // Test that the AND was generated properly (exactly 2 children) Assert.AreEqual(2, oEqual.Count); Assert.AreEqual(SyntaxKind.IdentifierTableSymbol, oEqual[0].ExpectedType); Assert.AreEqual(SyntaxKind.LiteralToken, oEqual[1].ExpectedType); }
public void ParseInvalidColumnPreConcat() { SlidingTextWindow oText = new SlidingTextWindow( @" SELECT || svc.svc_idnty FROM FPC_SERVICE "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.AreNotEqual(null, oSelect); Assert.AreEqual(2, oSelect.Count); SyntaxNode oColumnList = oSelect[0]; Assert.AreEqual(1, oColumnList.Count); Assert.AreEqual(SyntaxKind.ColumnListNode, oColumnList.ExpectedType); SyntaxNode oBarBar = oColumnList[0]; Assert.AreEqual(2, oBarBar.Count); Assert.AreEqual(SyntaxKind.BarBarToken, oBarBar.ExpectedType); }
public void ParseEmptyAnd() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT col1, col2 FROM ( SELECT * FROM FPC_SERVICE ) svc WHERE AND "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); // Test that a subquery type node was built SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword); Assert.IsTrue(oWhere != null); // Test that there is a select keyword in that subquery SyntaxNode oAND = oWhere.FindFirst(SyntaxKind.AndKeyword); Assert.AreNotEqual(null, oAND); Assert.AreEqual(SyntaxKind.BooleanToken, oAND[0].ExpectedType); // Check for the Filler node // Test that the AND was generated properly (exactly 2 children) Assert.AreEqual(2, oAND.Count); }
public static Boolean ScanNumber(SlidingTextWindow TextWindow, out SyntaxToken xoToken) { // Intermediate var char cNextChar; String sCharactersProcessedSoFar = String.Empty; for (int iIndex = 0; ; iIndex++) { // Move to the next char cNextChar = TextWindow.PeekCharacter(iIndex); // If the character is a valid number if (cNextChar >= '0' && cNextChar <= '9') { sCharactersProcessedSoFar += cNextChar; } else if (sCharactersProcessedSoFar.Length > 0) { xoToken = new SyntaxToken(SyntaxKind.NumericToken, sCharactersProcessedSoFar); TextWindow.SkipAhead(sCharactersProcessedSoFar.Length); return(true); } else if (iIndex + TextWindow.Position >= TextWindow.Count) { // Break, we couldnt find anything break; } } // Invalid case xoToken = null; return(false); }
public void ParseBadWhere() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT col1, col2 FROM ( SELECT * FROM FPC_SERVICE ) svc WHERE "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); // Test that a subquery type node was built SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword); Assert.AreNotEqual(null, oWhere); Assert.AreEqual(SyntaxKind.BooleanToken, oWhere[0].ExpectedType); // Check for the Filler node }
public void ParseSelectFromDBTable() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT * FROM APSHARE_FPVIEWS..FPC_SERVICE svc "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.IsTrue(oSelect != null); SyntaxNode oFrom = oSelect.FindFirst(SyntaxKind.FromKeyword); Assert.IsTrue(oFrom != null); SyntaxNode oTableIdn = oFrom.FindFirst(SyntaxKind.IdentifierTableSymbol); Assert.IsTrue(oTableIdn != null); }
public static SyntaxTrivia Scan(SlidingTextWindow TextWindow) { char xcNextChar = TextWindow.PeekCharacter(); switch (xcNextChar) { case '\r': if (TextWindow.PeekCharacter(1) == '\n') { TextWindow.SkipAhead(2); return(SyntaxFactory.EndOfLine("\r\n")); } return(SyntaxFactory.EndOfLine("\r")); case '\n': TextWindow.SkipAhead(1); return(SyntaxFactory.EndOfLine("\n")); default: // Try again if (SyntaxUtilities.IsNewLineCharacter(xcNextChar)) { TextWindow.SkipAhead(1); return(SyntaxFactory.EndOfLine("\n")); } return(null); } }
public void ParseIN() { SlidingTextWindow oText = new SlidingTextWindow( @" SELECT * FROM FPC_SERVICE WHERE svc_idnty IN ('0415783039') "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword); Assert.AreNotEqual(null, oWhere); Assert.AreEqual(1, oWhere.Count); Assert.AreEqual(SyntaxKind.InKeyword, oWhere[0].ExpectedType); Assert.AreEqual(2, oWhere[0].Count); Assert.AreEqual(SyntaxKind.IdentifierTableSymbol, oWhere[0][0].ExpectedType); Assert.AreEqual(SyntaxKind.OpenParenthesisToken, oWhere[0][1].ExpectedType); Assert.AreEqual(1, oWhere[0][1].Count); }
public void ParseSingleFunctionInWhere() { SlidingTextWindow oText = new SlidingTextWindow( @" SELECT svc_idnty FROM APSHARE_FPVIEWS..FPC_SERVICE svc WHERE MAX(svc.somecode) > 100 "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.IsTrue(oSelect != null); SyntaxNode oWhere = oTemp.FindFirst(SyntaxKind.WhereKeyword); Assert.AreEqual(1, oWhere.Count); SyntaxNode oGreaterThan = oWhere[0]; Assert.AreEqual(SyntaxKind.GreaterThanToken, oGreaterThan.ExpectedType); SyntaxNode oFunc = oGreaterThan[0]; Assert.AreEqual(SyntaxKind.MaxKeyword, oFunc.ExpectedType); }
public void ParseSingleFunctionInColumn() { SlidingTextWindow oText = new SlidingTextWindow( @" SELECT COALESCE(svc_idnty, 1, 10) FROM APSHARE_FPVIEWS..FPC_SERVICE svc "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.IsTrue(oSelect != null); SyntaxNode oColumnList = oSelect[0]; Assert.AreEqual(1, oColumnList.Count); SyntaxNode oFunction = oColumnList[0]; Assert.AreEqual(SyntaxKind.CoalesceKeyword, oFunction.ExpectedType); Assert.AreEqual(1, oFunction.Count); Assert.AreEqual(3, oFunction[0].Count); }
public void ParseMultipleColumnParenthesised() { SlidingTextWindow oText = new SlidingTextWindow( @" /* TEST */ SELECT (col1), (col2), (col3) FROM APSHARE_FPVIEWS..FPC_SERVICE svc "); // Initialises the Parser SyntaxParser oParser = new SyntaxParser(oText); // Try and generate a tree SyntaxNode oTemp = oParser.ParseTree(); SyntaxNode oSelect = oTemp.FindFirst(SyntaxKind.SelectKeyword); Assert.AreNotEqual(oSelect, null); SyntaxNode oColList = oSelect[0]; Assert.AreEqual(3, oColList.Count); foreach (SyntaxNode oChild in oColList) { Assert.AreEqual(oChild.ExpectedType, SyntaxKind.OpenParenthesisToken); SyntaxNode oColInner = oChild[0]; Assert.IsTrue( oColInner.ExpectedType == SyntaxKind.StarToken || oColInner.ExpectedType == SyntaxKind.IdentifierColumnSymbol || oColInner.ExpectedType == SyntaxKind.IdentifierTableSymbol); } }
public static Boolean ScanLiteral(SlidingTextWindow TextWindow, out SyntaxToken xoToken) { // Initialise a return string String sCharacterScannedSoFar = String.Empty; // for (int iIndex = 1; TextWindow.Position + iIndex < TextWindow.Count; iIndex++) { // char cNextChar = TextWindow.PeekCharacter(iIndex); // If we find an ending character if (cNextChar == '\'' || cNextChar == '\"') { xoToken = new SyntaxToken(SyntaxKind.LiteralToken, sCharacterScannedSoFar); // Plus 2 to skip passed the quotation marks TextWindow.SkipAhead(sCharacterScannedSoFar.Length + 2); return(true); } // Add the character after sCharacterScannedSoFar += cNextChar; } // If we reach here, no literal could be built. xoToken = null; return(false); }
public void Offset_WithNewSlidingTextWindow_IsZero() { var sourceText = SourceText.From("abcdefghijklmnopqrstuvwyx0123456789"); var slidingTextWindow = new SlidingTextWindow(sourceText); Assert.AreEqual(0, slidingTextWindow.Offset); }
public void Text_WithSlidingTextWindowCreatedWithSetText_ReturnsText() { var sourceText = SourceText.From("abcdefghijklmnopqrstuvwyx0123456789"); var slidingTextWindow = new SlidingTextWindow(sourceText); Assert.AreEqual(sourceText, slidingTextWindow.Text); }
public void NextChar_WithNoText_DoesNotChangePosition() { var slidingTextWindow = new SlidingTextWindow(SourceText.From("")); slidingTextWindow.NextChar(); Assert.AreEqual(0, slidingTextWindow.Position); }
public void NextChar_WithValidCharacter_IncrementsPosition() { var slidingTextWindow = new SlidingTextWindow(SourceText.From("A")); slidingTextWindow.NextChar(); Assert.AreEqual(1, slidingTextWindow.Position); }