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));
        }
Beispiel #2
0
 public UxText(TextSyntax syntax)
 {
     Syntax = syntax ?? throw new ArgumentNullException(nameof(syntax));
 }