Extra spaces before { can't be ignored

This commit is contained in:
Alexander Luzgarev 2018-04-01 12:18:59 +02:00
parent 161ee42c81
commit 356b4d4eea
2 changed files with 57 additions and 0 deletions

View File

@ -282,6 +282,10 @@ namespace Parser
var token = CurrentToken; var token = CurrentToken;
switch(token.Kind) { switch(token.Kind) {
case TokenKind.OpeningBrace: // cell array element access case TokenKind.OpeningBrace: // cell array element access
if (expression.TrailingTrivia.Any())
{
return expression;
}
var openingBrace = EatToken(); var openingBrace = EatToken();
var index = ParseExpression(); var index = ParseExpression();
var closingBrace = EatToken(TokenKind.ClosingBrace); var closingBrace = EatToken(TokenKind.ClosingBrace);
@ -439,6 +443,10 @@ namespace Parser
expression = ParseParenthesizedExpression(); expression = ParseParenthesizedExpression();
} }
if (expression == null)
{
return null;
}
return ParsePostfix(expression); return ParsePostfix(expression);
} }

View File

@ -9,6 +9,9 @@ namespace Parser
public SyntaxNode Parent { get; set; } public SyntaxNode Parent { get; set; }
public List<SyntaxNode> Children { get; } public List<SyntaxNode> Children { get; }
public virtual IEnumerable<Token> ChildTokens =>
Children.SelectMany(c => c.ChildTokens);
public SyntaxNode(List<SyntaxNode> children) public SyntaxNode(List<SyntaxNode> children)
{ {
Children = children; Children = children;
@ -16,6 +19,23 @@ namespace Parser
public virtual string FullText => public virtual string FullText =>
string.Join("", Children.Select(c => c.FullText)); string.Join("", Children.Select(c => c.FullText));
public List<Trivia> TrailingTrivia
{
get
{
if (ChildTokens.Any())
{
return ChildTokens.Last().TrailingTrivia;
}
else
{
return new List<Trivia>();
}
}
}
} }
public class TokenNode : SyntaxNode public class TokenNode : SyntaxNode
@ -29,6 +49,11 @@ namespace Parser
} }
public override string FullText => Token.FullText; public override string FullText => Token.FullText;
public override IEnumerable<Token> ChildTokens
{
get { yield return Token; }
}
} }
public class OutputIdentifierNode : SyntaxNode public class OutputIdentifierNode : SyntaxNode
@ -243,6 +268,12 @@ namespace Parser
} }
public override string FullText => Token.FullText; public override string FullText => Token.FullText;
public override IEnumerable<Token> ChildTokens
{
get { yield return Token; }
}
} }
public class NumberLiteralNode : ExpressionNode public class NumberLiteralNode : ExpressionNode
@ -255,6 +286,12 @@ namespace Parser
} }
public override string FullText => Token.FullText; public override string FullText => Token.FullText;
public override IEnumerable<Token> ChildTokens
{
get { yield return Token; }
}
} }
public class StringLiteralNode : ExpressionNode public class StringLiteralNode : ExpressionNode
@ -267,6 +304,12 @@ namespace Parser
} }
public override string FullText => Token.FullText; public override string FullText => Token.FullText;
public override IEnumerable<Token> ChildTokens
{
get { yield return Token; }
}
} }
public class StatementNode : SyntaxNode public class StatementNode : SyntaxNode
@ -397,6 +440,12 @@ namespace Parser
public EmptyExpressionNode() : base(null) public EmptyExpressionNode() : base(null)
{ {
} }
public override IEnumerable<Token> ChildTokens
{
get { yield break; }
}
} }
public class MemberAccessNode : ExpressionNode public class MemberAccessNode : ExpressionNode