コード例 #1
0
        public static Argument Evaluate(CompilerState state, SyntaxNode node)
        {
            if (state is null)
            {
                throw new ArgumentNullException(nameof(state));
            }
            if (node is null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            var result = node switch
            {
                TextSyntax text => textInstruction.Evaluate(state, text),
                QuoteSyntax quote => quoteInstruction.Evaluate(state, quote),
                StringLiteralSyntax stringLiteral => stringInstruction.Evaluate(state, stringLiteral),
                ArgumentSyntax argumentSyntax => argumentInstruction.Evaluate(state, argumentSyntax),
                CommandSyntax command => commandInstruction.Evaluate(state, command),
                ObjectSyntax objectSyntax => objectCreationInstruction.Evaluate(state, objectSyntax),
                FieldSyntax fieldSyntax => fieldInstruction.Evaluate(state, fieldSyntax),
                ArraySyntax arraySyntax => arrayInstruction.Evaluate(state, arraySyntax),
                PercentSyntax percentSyntax => percentInstruction.Evaluate(state, percentSyntax),
                ListSyntax list => blockInstruction.Evaluate(state, list),
                CommentSyntax _ => null,
                _ => throw new ArgumentException($"Evaluation of node type {node.GetType().Name} not implemented.", nameof(node)),
            };

            return(new Argument(node, result));
        }
コード例 #2
0
        private static SyntaxNode ParseMultilineComment(ParserContext context)
        {
            var token = context.Tokens.Dequeue();
            var span  = token.Span;

            var sb = new StringBuilder();

            while (token.Type != TokenType.None)
            {
                sb.Append(token.Content);
                if (token.Type == TokenType.AsteriskSlash)
                {
                    context.Tokens.Dequeue();
                    break;
                }
                token = context.Tokens.Dequeue();
            }

            var comment = new CommentSyntax
            {
                Span      = span.WithEnd(token.Span.End),
                Multiline = true,
                Comment   = sb.ToString()
            };

            if (token.Type == TokenType.None)
            {
                var endSpan = token.Span;
                context.Issues.Add(new TextSpan(endSpan.End - 1, 1, endSpan.Line), ParserIssueType.Error, "Expected end of multiline comment */");
            }

            return(comment);
        }
コード例 #3
0
        public void Render(CommentSyntax comment)
        {
            if (_comments)
            {
                Render(comment.DoubleForwardSlashToken);
                if (comment.EmptyCommentNode is null)
                {
                    Render(comment.CommentNode);
                }
            }

            WriteNewline();
        }
コード例 #4
0
ファイル: UxComment.cs プロジェクト: BeeWarloc/Fuse.UxParser
 public UxComment(CommentSyntax syntax)
 {
     Syntax = syntax ?? throw new ArgumentNullException(nameof(syntax));
 }