Upload
cebueso
View
48
Download
0
Embed Size (px)
Citation preview
Estructura léxica de Visual BasicLos lenguajes de programación, como las lenguas humanas, tienen una estructura
léxica. Un código fuente de un programa de Visual Basic consta de fichas. Tokens son
elementos de código atómicas. En Visual Basic, tenemos comentarios, variables,
literales, operadores delimitadores y palabras clave.
Programas de Visual Basic se componen de caracteres del juego de caracteres Unicode.
Comentarios
Comments son utilizados por los seres humanos para aclarar el código fuente. Todos los
comentarios en Visual Basic siguen ya sea el ' carácter o el Rem palabra clave.
Option Strict On
' This is comments.vb ' Author: Jan Bodnar' ZetCode 2010
Module Example
Rem program starts here Sub Main() Console.WriteLine("This is comments.vb") End Sub
End Module
Los comentarios son ignorados por el compilador de Visual Basic.
El espacio en blanco
El espacio en blanco en Visual Basic se utiliza para separar tokens en el archivo de
origen. Se utiliza para mejorar la legibilidad del código fuente.
Dim i As Integer
Los espacios en blanco son necesarios en algunos lugares. Por ejemplo entre
el Dim palabra clave y el nombre de la variable. En otros lugares, está prohibido. No
puede estar presente en los identificadores de variables o palabras clave del lenguaje.
a=1
b = 2
c = 3
La cantidad de espacio puesto entre fichas es irrelevante para el compilador de Visual
Basic.
Carácter de continuación de línea
Debemos utilizar un carácter de continuación de línea, si una declaración se extiende
por más de una línea. Esto difiere de los lenguajes basados en C y C.
Console.WriteLine ("La longitud de la primera cadena es" _
+ Str1.Length.ToString () + "caracteres")
Principalmente por razones de legibilidad, no quiero tener demasiados caracteres en una
línea. Rompemos la línea y continuar en la siguiente línea. En Visual Basic, hay que
utilizar el carácter de continuación de línea, de lo contrario la compilación fallaría.
Variables
A la variable es un identificador, que tiene un valor. En la programación de nuestras
palabras, que se le asigna un valor a una variable. Hablando técnicamente, una variable
es una referencia a una memoria de ordenador, en donde se almacena el valor. Los
nombres de variables pueden tener caracteres alfanuméricos y guiones bajos. Un
identificador puede comenzar con un carácter o un guión bajo. No puede comenzar con
un número. Los nombres de variables no distinguen entre mayúsculas y minúsculas. Esto
significa que, Name, name o NAME se refieren a la misma variable. Los nombres de
variables también no pueden igualar palabras clave del lenguaje.
Dim name23 As String
Dim _col As Integer
Dim birth_date As Date
Estos son identificadores válidos de Visual Basic.
Option Strict On
Module Example
Sub Main()
Dim name As String = "Robert" Dim Name As String = "Julia"
Console.WriteLine(name) Console.WriteLine(Name)
End Sub
End Module
Este código no se compilará. Los identificadores no distinguen entre mayúsculas y
minúsculas.
Literales
Un literal es una representación textual de un valor particular de un tipo. Tipos literales
son: Boolean, Integer, floating point, string, character y date. Técnicamente, un literal se
le asignará un valor en tiempo de compilación, mientras que una variable se le asigna en
tiempo de ejecución.
Dim age As Byte = 29
Dim nationality As String = "Hungarian"
Aquí asignamos dos literales a variables. Número 29 y la cadena " Hungarian " son
literales.
Option Strict On
Module Example
Sub Main()
Dim sng As Boolean = True Dim name As String = "James" Dim job As String = Nothing Dim age As Byte = 23 Dim weight As Single = 68.5 Dim born As DateTime = DateValue("November 12, 1987")
Console.WriteLine("His name is {0}", name)
If sng Then Console.WriteLine("He is single") Else Console.WriteLine("He is in a relationship") End If
Console.WriteLine("His job is {0}", job) Console.WriteLine("He weighs {0} kilograms", weight) Console.WriteLine("He was born in {0}", _ Format(born, "yyyy"))
End Sub
End Module
En el ejemplo anterior, tenemos otros literales. El literal booleano puede tener
valor True o False. James es una cadena literal. El Nothing representa el valor por defecto
de cualquier tipo de datos. 23 es un entero literal. 68.5 es un literal de coma
flotante. Finalmente, el November 12, 1987 es un literal de fecha.
$ ./literals.exe
His name is James
He is single
His job is
He weighs 68.5 kilograms
He was born in 1987
Esta es la salida del programa.
Operadores
Un operador es un símbolo que se utiliza para llevar a cabo una acción sobre algún
valor.
+ - * / \ ^ &
= += -= *= /= \= ^=
< > &= >>= <<= >= <=
>> <> <<
Estos son los operadores de Visual Basic. Vamos a hablar de los operadores más
adelante en el tutorial.
Separadores
Un separador es una secuencia de uno o más caracteres utilizados para especificar el
límite entre las regiones separadas, independientes en texto plano o de otro flujo de
datos.
( ) { } ! # , . : := ?
Estos son los separadores de Visual Basic.
Dim language As String = "Visual Basic"
Los personajes dobles se utilizan para marcar el comienzo y el final de una cadena.
Console.WriteLine("Today is {0}", GetToday)
Los paréntesis (corchetes) se utilizan para marcar la firma del método. La firma consta
de los parámetros del método. Las llaves se usan para indicar el valor evaluado.
Dim array() As Integer = { _
2, 4, 5, 6, 7, 3, 2 }
Las llaves también se utilizan para crear matrices.
Palabras clave
Una palabra clave es una palabra reservada en el lenguaje Visual Basic. Las palabras
clave se utilizan para realizar una tarea específica en el programa informático. Por
ejemplo, imprimir un valor, hacer tareas repetitivas o realizar operaciones lógicas. Un
programador no puede utilizar una palabra clave como una variable normal.
Visual Basic es rico en palabras clave. Muchos de ellos se explican en este tutorial. Las
palabras clave incluyen If, Else, Dim, For, Date, Double, Or, Exit y muchos otros.
Option Strict On
Module Example
Sub Main()
Dim i As Integer
For i = 0 To 35 Step 5 Console.WriteLine(i) Next
End SubEnd Module
En el ejemplo anterior, usamos varias palabras clave. Option, On, Module, Sub, Dim, As,
Integer, For, To, Step, Next, End son palabras clave de Visual Basic.
12. Resumen gramatical de Visual Basic .NETVisual Studio .NET 2003Esta sección resume la gramática del lenguaje de Visual Basic. Para más información sobre cómo leer la gramática, vea Notación gramatical.Gramática léxicaStart ::= [ LogicalLine+ ]LogicalLine ::= [ LogicalLineElement+ ] [ Comment ] LineTerminatorLogicalLineElement ::= WhiteSpace | TokenToken ::= Identifier | Keyword | Literal | Separator | OperadorCaracteres y líneasCharacter ::= < any Unicode character except a LineTerminator >Terminadores de líneaLineTerminator ::= < Unicode carriage return character (0x000D) > | < Unicode line feed character (0x000A) > | < Unicode carriage return character > < Unicode line feed character > | < Unicode line separator character (0x2028) > | < Unicode paragraph separator character (0x2029) >Continuación de líneaLineContinuation ::= WhiteSpace _ [ WhiteSpace+ ] LineTerminatorEspacio en blancoWhiteSpace ::= < Unicode blank characters (class Zs) > | LineContinuationComentariosComment ::= CommentMarker [ Character+ ]CommentMarker ::= ' | REMIdentificadoresIdentifier ::= NonEscapedIdentifier [ TypeCharacter ] | EscapedIdentifierNonEscapedIdentifier ::= < IdentifierName but not Keyword >EscapedIdentifier ::= [ IdentifierName ]IdentifierName ::= IdentifierStart [ IdentifierCharacter+ ]IdentifierStart ::= AlphaCharacter | UnderscoreCharacter IdentifierCharacterIdentifierCharacter ::= UnderscoreCharacter | AlphaCharacter | NumericCharacter | CombiningCharacter | FormattingCharacterAlphaCharacter ::= < Unicode alphabetic character (classes Lu, Ll, Lt, Lm, Lo, Nl) >NumericCharacter ::= < Unicode decimal digit character (class Nd) >CombiningCharacter ::= < Unicode combining character (classes Mn, Mc) >FormattingCharacter ::= < Unicode formatting character (class Cf) >UnderscoreCharacter ::= < Unicode connection character (class Pc) >IdentifierOrKeyword ::= Identifier | Palabra claveCaracteres de tipoTypeCharacter ::= IntegerTypeCharacter | LongTypeCharacter | DecimalTypeCharacter | SingleTypeCharacter |
DoubleTypeCharacter | StringTypeCharacterIntegerTypeCharacter ::= %LongTypeCharacter ::= &DecimalTypeCharacter ::= @SingleTypeCharacter ::= !DoubleTypeCharacter ::= #StringTypeCharacter ::= $Palabras claveKeyword ::= < member of keyword table at Keywords >LiteralesLiteral ::= BooleanLiteral | NumericLiteral | StringLiteral | CharacterLiteral | DateLiteral | NothingNumericLiteral ::= IntegerLiteral | FloatingPointLiteralLiterales booleanosBooleanLiteral ::= True | FalseLiterales enterosIntegerLiteral ::= IntegralLiteralValue [ IntegralTypeCharacter ]IntegralLiteralValue ::= IntLiteral | HexLiteral | OctalLiteralIntegralTypeCharacter ::= ShortCharacter | IntegerCharacter | LongCharacter | IntegerTypeCharacter | LongTypeCharacterShortCharacter ::= SIntegerCharacter ::= ILongCharacter ::= LIntLiteral ::= Digit+HexLiteral ::= & H HexDigit+OctalLiteral ::= & O OctalDigit+Digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9HexDigit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | FOctalDigit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7Literales de punto flotanteFloatingPointLiteral ::= FloatingPointLiteralValue [ FloatingPointTypeCharacter ] | IntLiteral FloatingPointTypeCharacterFloatingPointTypeCharacter ::= SingleCharacter | DoubleCharacter | DecimalCharacter | SingleTypeCharacter | DoubleTypeCharacter | DecimalTypeCharacterSingleCharacter ::= FDoubleCharacter ::= RDecimalCharacter ::= DFloatingPointLiteralValue ::= IntLiteral . IntLiteral [ Exponent ] | IntLiteral [ Exponent ] | IntLiteral ExponentExponent ::= E [ Sign ] IntLiteralSign ::= + | -Literales de cadenaStringLiteral ::= " [ StringCharacter+ ] "
StringCharacter ::= < Character except for " > | ""Literales de carácterCharacterLiteral ::= " StringCharacter " CLiterales de fechaDateLiteral ::= # [ Whitespace+ ] [ DateValue ] [ Whitespace+ ] [ TimeValue ] [ Whitespace+ ] #DateValue ::= MonthValue DateSeparator DayValue DateSeparator YearValueDateSeparator ::= / | -TimeValue ::= HourValue [ : MinuteValue ] [ : SecondValue ] [ Whitespace+ ] [ AMPM ]MonthValue ::= IntLiteralDayValue ::= IntLiteralYearValue ::= IntLiteralHourValue ::= IntLiteralMinuteValue ::= IntLiteralSecondValue ::= IntLiteralAMPM ::= AM | PMNothingNothing ::= NothingSeparadoresSeparator ::= ( | ) | ! | # | , | . | :Caracteres de operadorOperator ::= & | * | + | - | / | \ | ^ | < | = | >Preprocessing DirectivesDirectivas de compilación condicionalSource ::= [ ConditionalElement+ ]ConditionalElement ::= ConditionalIfGroup | ConditionalConstantDeclaration | LogicalLineConstantes condicionalesConditionalConstantDeclaration ::= # Const IdentifierOrKeyword = ConstantExpression LineTerminatorInstrucciones de compilación condicionalConditionalElseIfGroup ::= # ElseIf ConstantExpression [ Then ] LineTerminator [ ConditionalElement+ ]Directivas de origen externoSource ::= [ ExternalSourceElement+ ]ExternalSourceElement ::= ExternalSourceGroup | LogicalLineExternalSourceGroup ::= # ExternalSource ( StringLiteral , IntLiteral ) LineTerminator [ LogicalLine+ ] # End ExternalSource LineTerminatorDirectivas de regiónStart ::= [ RegionElement+ ]RegionElement ::= RegionGroup | LogicalLineRegionGroup ::= # Region [ NoDebug ] StringLiteral LineTerminator [ LogicalLine+ ] # End Region LineTerminatorConditionalElseGroup ::= # Else LineTerminator [ ConditionalElement+ ]Conceptos generalesAccesibilidadAccessModifier ::= Public | Protected | Friend | PrivateNombres de tipos y espacios de nombresQualifiedIdentifier ::= Identifier | QualifiedIdentifier . IdentifierOrKeyword
Bloques de atributosAttributes ::= < AttributeList >AttributeList ::= Attribute | AttributeList , AttributeAttribute ::= [ AttributeModifier : ] TypeName [ ( [ AttributeArguments ] ) ]AttributeModifier ::= Assembly | MóduloArgumentos de atributosAttributeArguments ::= AttributePositionalArgumentList | AttributePositionalArgumentList , VariablePropertyInitializerList | VariablePropertyInitializerListAttributePositionalArgumentList ::= ConstantExpression | AttributePositionalArgumentList , ConstantExpressionVariablePropertyInitializerList ::= VariablePropertyInitializer VariablePropertyInitializerList , VariablePropertyInitializerVariablePropertyInitializer ::= Identifier : = ConstantExpressionArchivos de código fuente y espacios de nombresSource ::= [ OptionDirective+ ] [ ImportsDirective+ ] [ Attributes ] [ NamespaceBody ]Opciones de compilaciónOptionDirective ::= OptionExplicitDirective | OptionStrictDirective | OptionCompareDirectiveInstrucción Option ExplicitOptionExplicitDirective ::= Option Explicit [ OnOff ] LineTerminatorOnOff ::= On | DesactivadoInstrucción Option StrictOptionStrictDirective ::= Option Strict [ OnOff ] LineTerminatorInstrucción Option CompareOptionCompareDirective ::= Option Compare CompareOption LineTerminatorCompareOption ::= Binary | TextInstrucción ImportsImportsDirective ::= Imports ImportsClauses LineTerminatorImportsClauses ::= ImportsClause | ImportsClauses , ImportsClauseImportsClause ::= ImportsAliasClause | RegularImportsClauseAlias de importaciónImportsAliasClause ::= Identifier = QualifiedIdentifierImportaciones regularesImportsNamespaceClause ::= QualifiedIdentifierDeclaraciones de espacios de nombresNamespaceDeclaration ::= Namespace QualifiedIdentifier LineTerminator [ NamespaceMemberDeclaration+ ] End Namespace LineTerminatorMiembros de espacios de nombresNamespaceMemberDeclaration ::= NamespaceDeclaration | TypeDeclarationTypeDeclaration ::=
ModuleDeclaration | NonModuleDeclarationNonModuleDeclaration ::= EnumDeclaration | StructureDeclaration | InterfaceDeclaration | ClassDeclaration | DelegateDeclarationTiposTypeName ::= QualifiedIdentifier | Object | PrimitiveTypeName | ClassTypeName | ArrayTypeNameTipos primitivosPrimitiveTypeName ::= NumericTypeName | Boolean | Date | Tipo CharNumericTypeName ::= IntegralTypeName | FloatingPointTypeName | Tipo DecimalIntegralTypeName ::= Byte | Short | Integer | Tipo LongFloatingPointTypeName ::= Single | DoubleEnumeracionesEnumDeclaration ::=[ Attributes ] [ EnumModifier+ ] Enum Identifier[ As IntegralTypeName ] LineTerminator EnumMemberDeclaration+ End Enum LineTerminatorEnumModifier ::= AccessModifier | ShadowsMiembros de enumeracionesEnumMemberDeclaration ::=[ Attributes ] Identifier [ = ConstantExpression ] LineTerminatorEstructurasStructDeclaration ::=[ Attributes ] [ StructModifier+ ] Structure Identifier LineTerminator [ TypeImplementsClause+ ] [ StructMemberDeclaration+ ] End Structure LineTerminatorStructureModifier ::= AccessModifier | ShadowsImplementaciones de interfaces de estructurasTypeImplementsClause ::= Implements Implements LineTerminatorImplements ::= TypeName | Implements , TypeNameMiembros de estructuraStructMemberDeclaration ::= NonModuleDeclaration VariableMemberDeclaration | ConstantMemberDeclaration | EventMemberDeclaration | MethodMemberDeclaration | PropertyMemberDeclaration |SharedConstructorDeclarationClasesClassTypeName ::= StringClassDeclaration ::=[ Attributes ] [ ClassModifier+ ] Class Identifier LineTerminator [ ClassBase ] [ TypeImplementsClause+ ] [ ClassMemberDeclaration+ ] End Class LineTerminatorModificadores de clase
ClassModifier ::= AccessModifier | Shadows | MustInherit | NotInheritableEspecificación base de claseClassBase ::= Inherits TypeName LineTerminatorMiembros de claseClassMemberDeclaration ::= NonModuleDeclaration | EventMemberDeclaration | VariableMemberDeclaration | ConstantMemberDeclaration | MethodMemberDeclaration | PropertyMemberDeclaration | ConstructorMemberDeclarationMódulos estándarModuleDeclaration ::= [ Attributes ] [ AccessModifier+ ] Module Identifier LineTerminator [ ModuleMemberDeclaration+ ] End Module LineTerminatorMiembros de módulos estándarModuleMemberDeclaration ::= NonModuleDeclaration | VariableMemberDeclaration | ConstantMemberDeclaration | EventMemberDeclaration | MethodMemberDeclaration | PropertyMemberDeclaration | SharedConstructorDeclarationInterfacesInterfaceDeclaration ::= [ Attributes ] [ InterfaceModifier+ ] Interface Identifier LineTerminator [ InterfaceBases+ ] [ InterfaceMemberDeclaration+ ] End Interface LineTerminatorInterfaceModifier ::= AccessModifier | ShadowsHerencia de interfazInterfaceBase ::= Inherits InterfaceBases LineTerminatorInterfaceBases ::= TypeName InterfaceBases , TypeNameMiembros de interfacesInterfaceMemberDeclaration ::=NonModuleDeclaration | EventMemberDeclaration | MethodMemberDeclaration | PropertyMemberDeclarationMatricesArrayTypeName ::= TypeName ArrayTypeModifierArrayTypeModifier ::= ( [ RankList ] )RankList ::= , | RankList ,ArrayNameModifier ::= ArrayTypeModifier | ArrayInitializationModifierDelegadosDelegateTypeDeclaration ::=[ DelegateModifier+ ] Delegate MethodDeclarationDelegateModifier ::= AccessModifier | Shadows
Miembros de tipoMétodosMethodMemberDeclaration ::= MethodDeclaration | ExternalMethodDeclarationDeclaraciones de métodos regularesMethodDeclaration ::= SubDeclaration | FunctionDeclarationSubDeclaration ::= [ Attributes ] [ ProcedureModifier+ ] Sub Identifier [ ( [ FormalParameterList ] ) ][ HandlesOrImplements ] LineTerminator [ Block ] [ End Sub LineTerminator ]FunctionDeclaration ::= [ Attributes ] [ ProcedureModifier+ ] Function Identifier[ ( [ FormalParameterList ] ) ] [ As [ Attributes ] TypeName ][ HandlesOrImplements ] LineTerminator [ Block ] [ End Function LineTerminator ]ProcedureModifier ::= AccessModifier | Shadows | Shared | Overridable | NotOverridable | MustOverride | Overrides | OverloadsHandlesOrImplements ::= HandlesClause | MethodImplementsClauseDeclaraciones de métodos regularesExternalMethodDeclaration ::= ExternalSubDeclaration | ExternalFunctionDeclarationExternalSubDeclaration ::= [ Attributes ] [ ExternalMethodModifier+ ] Declare [ CharsetModifier ] Sub IdentifierLibraryClause [ AliasClause ] [ ( [ FormalParameterList ] ) ] LineTerminatorExternalFunctionDeclaration ::= [ Attributes ] [ ExternalMethodModifier+ ] Declare [ CharsetModifier ] Function Identifier LibraryClause [ AliasClause ] [ ( [ FormalParameterList ] ) ][ As [ Attributes ] TypeName ] LineTerminatorExternalMethodModifier ::= AccessModifier | Shadows | OverloadsCharsetModifier ::= Ansi | Unicode | AutoLibraryClause ::= Lib StringLiteralAliasClause ::= Alias StringLiteralParámetros de métodosFormalParameterList ::= FormalParameter | FormalParameterList , FormalParameterFormalParameter ::= [ Attributes ] ParameterModifier+ Identifier [ As TypeName ][ = ConstantExpression ]ParameterModifier ::= ByRef | ByVal | Optional | ParamArrayImplementaciones de métodos de interfazImplementsClause ::= [ Implements ImplementsList ]ImplementsList ::= InterfaceMemberSpecifier | ImplementsList , InterfaceMemberSpecifierInterfaceMemberSpecifier ::= TypeName . IdentificadorControl de eventosHandlesClause ::= [ Handles EventHandlesList ]
EventHandlesList ::= EventMemberSpecifier | EventHandlesList , EventMemberSpecifierEventMemberSpecifier ::= Identifier . [ Identifier . ] Identifier MyBase . [ Identifier . ] IdentifierConstructoresConstructorMemberDeclaration ::= InstanceConstructorDeclaration | SharedConstructorDeclarationConstructores de instanciaInstanceConstructorDeclaration ::= [ Attributes ] [ InstanceConstructorModifier+ ] Sub New[ ( [ FormalParameterList ] ) ] LineTerminator [ Block ] End Sub LineTerminatorInstanceConstructorModifier ::= AccessModifier | OverloadsMiembros compartidosSharedConstructorDeclaration ::= [ Attributes ] Shared Sub New [ ( ) ] LineTerminator [ Block ] End Sub LineTerminatorEventosEventMemberDeclaration ::= [ Attributes ] [ EventModifiers+ ] Event Identifier ParametersOrType[ ImplementsClause ] LineTerminatorParametersOrType ::= [ ( [ FormalParameterList ] ) ] | As TypeNameConstantesConstantMemberDeclaration ::= [ Attributes ] [ ConstantModifier+ ] Const Identifier [ As TypeName ] =ConstantExpression LineTerminatorConstantModifier ::= AccessModifiers | ShadowsVariablesVariableMemberDeclaration ::=[ Attributes ] [ VariableModifier+ ] [ Dim ] VariableDeclarators LineTerminatorVariableModifier ::= AccessModifiers | Shadows | Shared | ReadOnly | WithEventsVariableDeclarators ::= VariableDeclarator | VariableDeclarators , VariableDeclaratorVariableDeclarator ::= VariableIdentifiers [ As TypeName ] |VariableIdentifier[ As [ New ] TypeName [ ( ArgumentList ) ] ] [ = VariableInitializer ]VariableIdentifiers ::= VariableIdentifier | VariableIdentifiers , VariableIdentifierVariableIdentifier ::= Identifier [ ArrayNameModifier ]Inicializadores de variablesVariableInitializer ::= RegularInitializer | ArrayElementInitializerInicializadores regularesRegularInitializer ::= ExpressionInicializadores de elementos de matrizArrayElementInitializer ::= { [ VariableInitializerList ] }VariableInitializerList ::= VariableInitializer |
VariableInitializerList , VariableInitializerVariableInitializer ::= Expression | ArrayElementInitializerInicializadores de tamaño de matrizArrayInitializationModifier ::= ( InitializationRankList )InitializationRankList ::= Expression | InitializationRankList , ExpressionPropiedadesPropertyMemberDeclaration ::= [ Attributes ] PropertyModifier+ Property Identifier [ ( [ FormalParameterList ] ) ][ As TypeName ] [ MethodImplementsClause ] LineTerminator PropertyAccessorDeclaration+ [ End Property LineTerminator ]PropertyModifier ::= ProcedureModifier | Default | ReadOnly | WriteOnlyPropertyAccessorDeclaration ::= PropertyGetDeclaration | PropertySetDeclarationDeclaraciones de captadoresPropertyGetDeclaration ::= [ Attributes ] Get LineTerminator [ Block ] End GetDeclaraciones de establecedoresPropertySetDeclaration ::= [ Attributes ] Set LineTerminator [ Block ] End SetInstruccionesBloquesBlock ::= [ LabeledLine+ ]LabeledLine ::= [ LabelName : ] [ Statements ] LineTerminatorLabelName ::= Identifier | IntLiteralStatements ::= [ Statement ] | Statements [ Statement ]Instrucciones de declaración de variables localesLocalDeclarationStatement ::= LocalModifier LocalDeclarator StatementTerminatorLocalModifier ::= Dim | ConstLocalDeclarator ::= LocalIdentifiers [ As TypeName ]Identifier [ ArrayNameModifier ][ As [ New ] TypeName [ ( [ ArgumentList ] ) ] ] [ = VariableInitializer ]LocalIdentifiers ::= Identifier [ ArrayNameModifier ] | LocalIdentifiers , Identifier [ ArrayNameModifier ]LocalVariableName ::= IdentifierInstrucción WithWithStatement ::= With Expression StatementTerminator [ Block ] End With StatementTerminatorInstrucción SyncLockSyncLockStatement ::= SyncLock Expression StatementTerminator [ Block ] End SyncLock StatementTerminatorInstrucciones de eventos
EventStatement ::= RaiseEventStatement | AddHandlerStatement | RemoveHandlerStatementInstrucción RaiseEventRaiseEventStatement ::= RaiseEvent EventMemberName[ ( [ ArgumentList ] ) ] StatementTerminatorInstrucciones AddHandler y RemoveHandlerAddHandlerStatement ::= AddHandler HandlerArguments StatementTerminatorRemoveHandlerStatement ::= RemoveHandler HandlerArguments StatementTerminatorHandlerArguments ::= EventExpression , ArgumentExpressionInstrucciones de asignaciónAssignmentStatement ::= SimpleAssignmentStatement | DelegateAssignmentStatement | CompoundAssignmentStatement | MidAssignmentStatementInstrucciones de asignaciones simplesRegularAssignmentStatement ::= VariableExpression = Expression StatementTerminatorVariableExpression ::= ExpressionInstrucciones de asignaciones de delegadoDelegateAssignmentStatement ::=VariableExpression = AddressOf InvocationTargetExpression StatementTerminatorInstrucciones de asignaciones compuestasCompoundAssignmentStatement ::= VariableExpression CompoundBinaryOperator =Expression StatementTerminatorCompoundBinaryOperator ::= ^ | * | / | \ | + | - | &Instrucción de asignación MidMidAssignmentStatement ::= Mid [ $ ] ( VariableExpression , Expression [ , Expression ] ) =Expression StatementTerminatorInstrucción de invocaciónInvocationStatement ::= [ Call ] InvocationExpression StatementTerminatorInstrucciones condicionalesConditionalStatement ::= IfStatement | SelectStatementIf...Then...Else (Instrucciones)IfStatement ::= BlockIfStatement | LineIfThenStatementBlockIfStatement ::= If BooleanExpression [ Then ] StatementTerminator [ Block ] [ ElseIfStatement+ ] [ ElseStatement ] End If StatementTerminatorElseIfStatement ::= ElseIf BooleanExpression [ Then ] StatementTerminator [ Block ]ElseStatement ::= Else StatementTerminator [ Block ]LineIfThenStatement ::= If BooleanExpression Then [Statements ][ Else Statements ] StatementTerminatorBooleanExpression ::= ExpressionInstrucciones Select...CaseSelectStatement ::= Select [ Case ] Expression StatementTerminator [ CaseStatement+ ]
[ CaseElseStatement ] End Select StatementTerminatorCaseStatement ::= Case CaseClauses StatementTerminator [ Block ]CaseClauses ::= CaseClause | CaseClauses , CaseClauseCaseClause ::= [ Is ] ComparisonOperator Expression | Expression [ To Expression ]ComparisonOperator ::= = | < > | < | > | = > | = <CaseElseStatement ::= Case Else StatementTerminator [ Block ]Instrucciones de bucleLoopStatement ::= WhileStatement | DoLoopStatement | ForStatement | ForEachStatementInstrucciones While...End While y Do...LoopWhileStatement ::= While BooleanExpression StatementTerminator [ Block ] End While StatementTerminatorDoLoopStatement ::= Do [ WhileOrUntil BooleanExpression ] StatementTerminator [ Block ] Loop [ WhileOrUntil BooleanExpression ] StatementTerminatorWhileOrUntil ::= While | UntilFor...Next (Instrucciones)ForStatement ::= For LoopControlVariable = Expression To Expression [ Step Expression ] StatementTerminator [ Block ] Next [ NextExpressionList ] StatementTerminatorLoopControlVariable ::= Identifier As TypeName | ExpressionNextExpressionList ::= VariableExpression | NextExpressionList , VariableExpressionFor Each...Next (Instrucciones)ForEachStatement ::= For Each LoopControlVariable In Expression StatementTerminator [ Block ] Next [ VariableExpression ] StatementTerminatorInstrucciones de control de excepcionesExceptionHandlingStatement ::= StructuredExceptionStatement | UnstructuredExceptionStatementInstrucciones de control estructurado de excepcionesStructuredExceptionStatement ::= ThrowStatement | TryStatement
ThrowStatement ::= Throw [ Expression ] StatementTerminatorTryStatement ::= Try StatementTerminator [ Block ] [ CatchStatement+ ] [ FinallyStatement ] End Try StatementTerminatorBloques FinallyFinallyStatement ::= Finally StatementTerminator [ Block ]Bloques CatchCatchStatement ::= Catch [ Identifier As TypeName ] [ When BooleanExpression ] StatementTerminator [ Block ]Instrucciones de control no estructurado de excepcionesUnstructuredExceptionStatement ::= ErrorStatement | OnErrorStatement | ResumeStatementInstrucción ErrorErrorStatement ::= Error Expression StatementTerminatorInstrucción On ErrorOnErrorStatement ::= On Error ErrorClause StatementTerminatorErrorClause ::= Resume Next | GoTo -1 | GoTo 0 | GotoStatementInstrucción ResumeResumeStatement ::= Resume [ ResumeClause ] StatementTerminatorResumeClause ::= Next | LabelNameInstrucciones de flujo de controlControlFlowStatement ::= GotoStatement | ExitStatement | StopStatement | EndStatement | ReturnStatementGotoStatement ::= GoTo LabelName StatementTerminatorExitStatement ::= Exit ExitKind StatementTerminatorExitKind ::= Do | For | While | Select | Sub | Function | Property | PruebeStopStatement ::= Stop StatementTerminatorEndStatement ::= End StatementTerminatorReturnStatement ::= Return [ Expression ]Instrucciones de control de matricesArrayHandlingStatement ::= RedimStatement | EraseStatementInstrucción ReDimRedimStatement ::= ReDim [ Preserve ] RedimClauses+ StatementTerminatorRedimClauses ::= RedimClauses | RedimClause , RedimClausesRedimClause ::= VariableExpression ArrayInitializationModifier
Instrucción EraseEraseStatement ::= Erase VariableExpressions StatementTerminatorVariableExpressions ::= VariableExpression | VariableExpressions , VariableExpressionExpresionesExpression ::= SimpleExpression | InvocationExpression | MemberAccessExpression | IndexExpression | NewExpression | CastExpression | TypeOfExpression | OperatorExpressionExpresiones constantesConstantExpression ::= ExpressionExpresiones variablesVariableExpression ::= ExpressionExpresiones de eventosEventExpression ::= Expression . IdentifierOrKeyword | [ MeExpression . ] IdentifierOrKeyword | EventMemberNameExpresiones simplesSimpleExpression ::= LiteralExpression | ParenthesizedExpression | MeExpression | MetaTypeExpression | LocalVariableExpression | TypeOfIsOperatorExpression | IsOperatorExpressionExpresiones literalesLiteralExpression ::= LiteralExpresiones entre paréntesisParenthesizedExpression ::= ( Expression )Expresión MeMeExpression ::= MeExpresiones GetTypeMetaTypeExpression ::= GetType ( TypeName )Expresiones de variable localLocalVariableExpression ::= LocalVariableNameExpresiones TypeOf...IsTypeOfIsOperatorExpression ::= TypeOf Expression Is TypeNameExpresiones IsIsOperatorExpression ::= Expression Is ExpressionExpresiones de invocaciónInvocationExpression ::= InvocationTargetExpression [ ( [ ArgumentList ] ) ]InvocationTargetExpression ::= DelegateExpression | [ [ Expression ] . ] IdentifierOrKeyword | MyClass . IdentifierOrKeyword | MyBase . IdentifierOrKeyword | MethodMemberName
DelegateExpression ::= ExpressionListas de argumentosArgumentList ::= PositionalArgumentList , NamedArgumentList | PositionalArgumentList | NamedArgumentListPositionalArgumentList ::= ArgumentExpression | PositionalArgumentList , [ ArgumentExpression ]NamedArgumentList ::= Identifier : = ArgumentExpression | NamedArgumentList , Identifier : = ArgumentExpressionArgumentExpression ::= Expression | DelegateArgumentExpressionExpresiones de argumentos de delegadoDelegateArgumentExpression ::= AddressOf InvocationTargetExpressionExpresiones de acceso a miembrosMemberAccessExpression ::= [ [ Expression ] . ] IdentifierOrKeyword | VariableMemberName | PropertyMemberName | ConstantMemberName | EnumMemberName | DictionaryAccessExpressionAcceso a miembros de tipo diccionarioDictionaryAccessExpression ::= [ Expression ] ! IdentifierOrKeywordExpresiones de índiceIndexExpression ::= Expression ( ArgumentList )Expresiones NewNewExpression ::= ObjectCreationExpression | ArrayCreationExpression | DelegateCreationExpressionExpresiones de creación de objetosObjectCreationExpression ::= New TypeName [ ( [ ArgumentList ] ) ]Expresiones de creación de matricesArrayCreationExpression ::= New TypeName ( ArgumentList ) ArrayElementInitializer | New ArrayTypeName ArrayElementInitializerExpresiones de creación de delegadosDelegateCreationExpression ::= New TypeName ( InvocationTargetExpression )Expresiones de conversiónCastExpression ::= CType ( Expression , TypeName ) | CastTarget ( Expression )CastTarget ::= CBool | CByte | CChar | CDate | CDec | CDbl | CInt | CLng | CObj | CShort | CSng | CStrOperadoresOperatorExpression ::= UnaryOperatorExpression | BinaryOperatorExpressionBinaryOperatorExpression ::= ArithmeticOperatorExpression | RelationalOperatorExpression | LikeOperatorExpression | ConcatenationOperatorExpression | ShortCircuitLogicalOperatorExpression |
LogicalOperatorExpression | ShiftOperatorExpressionOperadores unariosUnaryOperatorExpression ::= UnaryPlusExpression | UnaryMinusExpression | UnaryLogicalNotExpressionOperador unario másUnaryPlusExpression ::= + ExpressionOperador unario MenosUnaryMinusExpression ::= - ExpressionOperador de negación lógicaUnaryLogicalNotExpression ::= Not ExpressionOperadores aritméticosArithmeticOperatorExpression ::= AdditionOperatorExpression | SubtractionOperatorExpression | MultiplicationOperatorExpression | DivisionOperatorExpression | ModuloOperatorExpression | ExponentOperatorExpressionOperador de sumaAdditionOperatorExpression ::= Expression + ExpressionOperador de restaSubtractionOperatorExpression ::= Expression - ExpressionOperador de multiplicaciónMultiplicationOperatorExpression ::= Expression * ExpressionOperador de divisiónDivisionOperatorExpression ::= RegularDivisionOperatorExpression | IntegerDivisionOperatorExpressionRegularDivisionOperatorExpression ::= Expression / ExpressionIntegerDivisionOperatorExpression ::= Expression \ ExpressionOperador ModModOperatorExpression ::= Expression Mod ExpressionOperador de exponenciaciónExponentOperatorExpression ::= Expression ^ ExpressionOperadores relacionalesRelationalOperatorExpression ::= Expression = Expression | Expression < > Expression | Expression < Expression | Expression > Expression | Expression < = Expression | Expression > = ExpressionOperador LikeLikeOperatorExpression ::= Expression Like ExpressionOperador de concatenaciónConcatenationOperatorExpression ::= Expression & ExpressionOperadores lógicosLogicalOperatorExpression ::= Expression And Expression | Expression Or Expression | Expression Xor Expression | Expression AndAlso Expression |
Expression OrElse ExpressionOperadores de desplazamientoShiftOperatorExpression ::= Expression << Expression | Expression >> Expression