From 356b4d4eeaf956f2bd844075af5205deefbe0830 Mon Sep 17 00:00:00 2001 From: Alexander Luzgarev Date: Sun, 1 Apr 2018 12:18:59 +0200 Subject: [PATCH] Extra spaces before { can't be ignored --- Parser/MParser.cs | 8 ++++++++ Parser/SyntaxNode.cs | 49 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/Parser/MParser.cs b/Parser/MParser.cs index 614bd6d..9cf1137 100644 --- a/Parser/MParser.cs +++ b/Parser/MParser.cs @@ -282,6 +282,10 @@ namespace Parser var token = CurrentToken; switch(token.Kind) { case TokenKind.OpeningBrace: // cell array element access + if (expression.TrailingTrivia.Any()) + { + return expression; + } var openingBrace = EatToken(); var index = ParseExpression(); var closingBrace = EatToken(TokenKind.ClosingBrace); @@ -439,6 +443,10 @@ namespace Parser expression = ParseParenthesizedExpression(); } + if (expression == null) + { + return null; + } return ParsePostfix(expression); } diff --git a/Parser/SyntaxNode.cs b/Parser/SyntaxNode.cs index 978cb45..2ed31c1 100644 --- a/Parser/SyntaxNode.cs +++ b/Parser/SyntaxNode.cs @@ -9,6 +9,9 @@ namespace Parser public SyntaxNode Parent { get; set; } public List Children { get; } + public virtual IEnumerable ChildTokens => + Children.SelectMany(c => c.ChildTokens); + public SyntaxNode(List children) { Children = children; @@ -16,6 +19,23 @@ namespace Parser public virtual string FullText => string.Join("", Children.Select(c => c.FullText)); + + public List TrailingTrivia + + { + get + { + if (ChildTokens.Any()) + { + return ChildTokens.Last().TrailingTrivia; + } + else + { + return new List(); + } + } + } + } public class TokenNode : SyntaxNode @@ -29,6 +49,11 @@ namespace Parser } public override string FullText => Token.FullText; + + public override IEnumerable ChildTokens + { + get { yield return Token; } + } } public class OutputIdentifierNode : SyntaxNode @@ -243,6 +268,12 @@ namespace Parser } public override string FullText => Token.FullText; + + public override IEnumerable ChildTokens + { + get { yield return Token; } + } + } public class NumberLiteralNode : ExpressionNode @@ -255,6 +286,12 @@ namespace Parser } public override string FullText => Token.FullText; + + public override IEnumerable ChildTokens + { + get { yield return Token; } + } + } public class StringLiteralNode : ExpressionNode @@ -267,6 +304,12 @@ namespace Parser } public override string FullText => Token.FullText; + + public override IEnumerable ChildTokens + { + get { yield return Token; } + } + } public class StatementNode : SyntaxNode @@ -397,6 +440,12 @@ namespace Parser public EmptyExpressionNode() : base(null) { } + + public override IEnumerable ChildTokens + { + get { yield break; } + } + } public class MemberAccessNode : ExpressionNode