VariableDeclarationStatementSyntax VarDeclaration() { if (Accept("let") == null) { return(null); } var idToken = Expect(TokenType.Identifier); var varDecl = new VariableDeclarationStatementSyntax(new IdentifierNameSyntax(idToken.Value)); if (VarPrimeDeclaration() is var initExpr && initExpr != null) { varDecl.Children.Add(initExpr); } return(varDecl); ExpressionSyntax VarPrimeDeclaration() { if (Accept("=") == null) { return(null); } if (Expression() is var initExpression && initExpression == null) { throw new Exception("Expected an expression"); } return(initExpression); } }
public override ProgValue Visit(VariableDeclarationStatementSyntax syntax) { var value = syntax.Value?.Accept(this) ?? NoneValue.Value; _logger.Log($"VAR: {syntax.Identifier.Name} = {value}"); _symbolTable.AddSymbol(syntax.Identifier.Name, value); return(value); }