Ejemplo n.º 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));
        }
Ejemplo n.º 2
0
        private bool TryParseStringLiteral([NotNullWhen(true)] out ExpressionSyntax?expressionSyntax)
        {
            Debug.Assert(_lexer.PeekTokenType() == TokenType.StringLiteral);
            expressionSyntax = null;

            var tokenPosition = _lexer.Position;
            var tokenSpan     = _lexer.GetToken();

            // The string literal must end in a quote
            if (tokenSpan.Length < 2 || tokenSpan[tokenSpan.Length - 1] != (byte)'"')
            {
                _diagnosticSink.Add(DiagnosticCode.ExpectedClosingQuote, tokenPosition);
                return(false);
            }

            // Strip the quotes
            // TODO: Process escape sequences
            expressionSyntax = new StringLiteralSyntax(tokenSpan.Slice(1, tokenSpan.Length - 2).ToArray(), tokenPosition);
            return(true);
        }
		public virtual void PostWalkStringLiteral(StringLiteralSyntax stringLiteralSyntax) { }
		// StringLiteralSyntax
		public virtual bool WalkStringLiteral(StringLiteralSyntax stringLiteralSyntax) { return DefaultWalk(stringLiteralSyntax); }
Ejemplo n.º 5
0
 public StringLiteral(StringLiteralSyntax syntax, Package containingPackage)
     : base(syntax, containingPackage)
 {
 }
Ejemplo n.º 6
0
 protected virtual void VisitStringLiteralSyntax(StringLiteralSyntax pNode)
 {
 }
 public virtual void VisitStringLiteral(StringLiteralSyntax node)
 {
 }
Ejemplo n.º 8
0
 protected virtual SyntaxNode VisitStringLiteralSyntax(StringLiteralSyntax pNode)
 {
     return(pNode);
 }