Parse double-quoted string literals

This commit is contained in:
Alexander Luzgarev 2018-04-04 11:00:17 +02:00
parent db216671c3
commit a2ef543292
4 changed files with 40 additions and 0 deletions

View File

@ -427,5 +427,17 @@ namespace Parser.Tests
Assert.AreEqual("a", (e.Operand as IdentifierNameNode)?.Token.PureToken.LiteralText);
Assert.AreEqual(text, actual.FullText);
}
[Test]
public void ParseDoubleQuotedStringLiteral()
{
var text = "\"some string\"";
var sut = CreateParser(text);
var actual = sut.ParseExpression();
Assert.IsInstanceOf<DoubleQuotedStringLiteralNode>(actual);
var s = (DoubleQuotedStringLiteralNode) actual;
Assert.AreEqual("some string", s.Token.PureToken.Value);
Assert.AreEqual(text, actual.FullText);
}
}
}

View File

@ -456,6 +456,11 @@ namespace Parser
var str = EatToken();
expression = Factory.StringLiteral(str);
}
else if (token.Kind == TokenKind.DoubleQuotedStringLiteral)
{
var str = EatToken();
expression = Factory.DoubleQuotedStringLiteral(str);
}
else if (token.Kind == TokenKind.OpeningSquareBracket) // array literal expression
{
expression = ParseArrayLiteral();

View File

@ -245,6 +245,12 @@ namespace Parser
return new StringLiteralNode(stringLiteral);
}
public DoubleQuotedStringLiteralNode DoubleQuotedStringLiteral(
Token stringLiteral)
{
return new DoubleQuotedStringLiteralNode(stringLiteral);
}
public ExpressionStatementNode ExpressionStatement(ExpressionNode expression)
{
var children = new List<SyntaxNode> {expression};

View File

@ -315,6 +315,23 @@ namespace Parser
}
public class DoubleQuotedStringLiteralNode : ExpressionNode
{
public Token Token { get; }
public DoubleQuotedStringLiteralNode(Token token) : base(null)
{
Token = token;
}
public override string FullText => Token.FullText;
public override IEnumerable<Token> ChildTokens
{
get { yield return Token; }
}
}
public class StatementNode : SyntaxNode
{
public TokenNode SemicolonOrComma { get; set; }