Aracılığıyla paylaş


Sözcük Temelli Dil Bilgisi

Bir Visual Basic programının derlenmesi önce Unicode karakterlerinin ham akışını sıralı sözcük belirteçleri kümesine çevirmeyi içerir. Visual Basic dili serbest biçimli olmadığından, belirteç kümesi daha sonra bir dizi mantıksal satıra bölünür. Mantıksal çizgi, akışın başlangıcından veya bir satır sonlandırıcısından önce bir satır devamlılığı veya akışın sonuna kadar olmayan bir sonraki satır sonlandırıcısına yayılır.

Not. Dilin 9.0 sürümünde XML değişmez değer ifadelerinin kullanıma sunulmasıyla, Visual Basic kodunun söz dizimsel bağlam dikkate alınmadan belirtilebilir olması açısından Visual Basic'in artık benzersiz bir sözcük bilgisi yoktur. Bunun nedeni, XML ve Visual Basic'in farklı sözcük kuralları olması ve belirli bir zamanda kullanımda olan sözcük kuralları kümesinin o anda hangi söz dizimsel yapının işlendiğine bağlı olmasıdır. Bu belirtim, normal Visual Basic kodunun sözcük temelli kuralları için bir kılavuz olarak bu sözcük bilgisi bölümünü korur.

LogicalLineStart
    : LogicalLine*
    ;

LogicalLine
    : LogicalLineElement* Comment? LineTerminator
    ;

LogicalLineElement
    : WhiteSpace
    | LineContinuation
    | Token
    ;

Token
    : Identifier
    | Keyword
    | Literal
    | Separator
    | Operator
    ;

Karakterler ve Çizgiler

Visual Basic programları Unicode karakter kümesindeki karakterlerden oluşur.

Character:
    '<Any Unicode character except a LineTerminator>'
    ;

Satır Sonlandırıcıları

Unicode satır sonu karakterleri mantıksal çizgileri ayırır.

LineTerminator
    : '<Unicode 0x00D>'
    | '<Unicode 0x00A>'
    | '<CR>'
    | '<LF>'
    | '<Unicode 0x2028>'
    | '<Unicode 0x2029>'
    ;

Satır Devamı

Satır devamlılığı, tek bir alt çizgi karakterinin hemen önüne metin satırındaki son karakter (boşluk dışında) olarak geçen en az bir boşluk karakterinden oluşur. Çizgi devamlılığı, mantıksal çizginin birden fazla fiziksel çizgiye yayılmasına olanak tanır. Satır devamlılıkları, boşluk gibi ele alınsa da boşluk olarak değerlendirilir.

LineContinuation
    : WhiteSpace '_' WhiteSpace* LineTerminator
    ;

Aşağıdaki programda bazı satır devamlılıkları gösterilmektedir:

Module Test
    Sub Print( _
        Param1 As Integer, _
        Param2 As Integer )

        If (Param1 < Param2) Or _
            (Param1 > Param2) Then
            Console.WriteLine("Not equal")
        End If
    End Function
End Module

Söz dizimindeki bazı yerler örtük satır devamlılıklarına izin verir. Bir satır sonlandırıcıyla karşılaşıldığında

  • virgülden (, sonra), parantezi (( açın), küme ayracı (){ açın veya eklenmiş ifadeyi (<%=) açın

  • bir öğe niteleniyorsa (ör. örtük With bağlam kullanmıyorsa) üye niteleyicisi (. veya .@ veya ...) sonrasında

  • kapatma parantezi ()), küme ayracı (} ) veya katıştırılmış ifadeyi kapatmadan önce (%>)

  • öznitelik bağlamında küçüktür (<) sonra

  • öznitelik bağlamında büyüktür (>) önce

  • dosya düzeyi olmayan bir öznitelik bağlamında büyüktür (>) sonra

  • sorgu işleçlerinden önce ve sonra (Where, Order, Selectvb.)

  • bir ifade bağlamında ikili işleçler (+, -, /, *vb.) sonra

  • herhangi bir bağlamda atama işleçlerinden (=, :=, +=, -=vb.) sonra.

satır sonlandırıcısı, bir satır devamıymış gibi değerlendirilir.

Comma
    : ',' LineTerminator?
    ;

Period
    : '.' LineTerminator?
    ;

OpenParenthesis
    : '(' LineTerminator?
    ;

CloseParenthesis
    : LineTerminator? ')'
    ;

OpenCurlyBrace
    : '{' LineTerminator?
    ;

CloseCurlyBrace
    : LineTerminator? '}'
    ;

Equals
    : '=' LineTerminator?
    ;

ColonEquals
    : ':' '=' LineTerminator?
    ;

Örneğin, önceki örnek şu şekilde de yazılabilir:

Module Test
    Sub Print(
        Param1 As Integer,
        Param2 As Integer)

        If (Param1 < Param2) Or
            (Param1 > Param2) Then
            Console.WriteLine("Not equal")
        End If
    End Function
End Module

Örtük satır devamlılıkları yalnızca belirtilen belirteç öncesinde veya sonrasında doğrudan çıkarılacaktır. Satır devamı öncesinde veya sonrasında çıkarılmazlar. Örneğin:

Dim y = 10
' Error: Expression expected for assignment to x
Dim x = _

y

Satır devamlılıkları koşullu derleme bağlamlarında çıkarılmaz. (Not. Derlenmemiş koşullu derleme bloklarındaki metnin söz dizimsel olarak geçerli olması gerekmediğinden bu son kısıtlama gereklidir. Bu nedenle, özellikle dil gelecekte genişletildikçe, bloktaki metinler koşullu derleme deyimi tarafından yanlışlıkla "alınıyor" olabilir.)

Boşluk

Boşluk yalnızca belirteçleri ayırmaya hizmet eder ve aksi takdirde yoksayılır. Yalnızca boşluk içeren mantıksal çizgiler yoksayılır. (Not. Satır sonlandırıcıları boşluk olarak kabul edilmez.)

WhiteSpace
    : '<Unicode class Zs>'
    | '<Unicode Tab 0x0009>'
    ;

Yorumlar

Açıklama tek tırnak karakteriyle veya anahtar sözcüğüyle REMbaşlar. Tek tırnak karakteri ASCII tek tırnak karakteri, Unicode sol tek tırnak karakteri veya Unicode sağ tek tırnak karakteridir. Açıklamalar kaynak satırda herhangi bir yerde başlayabilir ve fiziksel satırın sonu açıklamayı sonlandırır. Derleyici, açıklamanın başlangıcı ile satır sonlandırıcısı arasındaki karakterleri yoksayar. Sonuç olarak, açıklamalar satır devamlılıkları kullanılarak birden çok satır arasında genişletilemez.

Comment
    : CommentMarker Character*
    ;

CommentMarker
    : SingleQuoteCharacter
    | 'REM'
    ;

SingleQuoteCharacter
    : '\''
    | '<Unicode 0x2018>'
    | '<Unicode 0x2019>'
    ;

Tanımlayıcılar

Tanımlayıcı bir addır. Visual Basic tanımlayıcıları Unicode Standart Ek 15'e tek bir özel durumla uyumludur: tanımlayıcılar bir alt çizgi (bağlayıcı) karakteriyle başlayabilir. Bir tanımlayıcı alt çizgiyle başlıyorsa, bir satır devamlılığından ayırabilmek için en az bir geçerli tanımlayıcı karakteri daha içermelidir.

Identifier
    : NonEscapedIdentifier TypeCharacter?
    | Keyword TypeCharacter
    | EscapedIdentifier
    ;

NonEscapedIdentifier
    : '<Any IdentifierName but not Keyword>'
    ;

EscapedIdentifier
    : '[' IdentifierName ']'
    ;

IdentifierName
    : IdentifierStart IdentifierCharacter*
    ;

IdentifierStart
    : AlphaCharacter
    | UnderscoreCharacter IdentifierCharacter
    ;

IdentifierCharacter
    : UnderscoreCharacter
    | AlphaCharacter
    | NumericCharacter
    | CombiningCharacter
    | FormattingCharacter
    ;

AlphaCharacter
    : '<Unicode classes Lu,Ll,Lt,Lm,Lo,Nl>'
    ;

NumericCharacter
    : '<Unicode decimal digit class Nd>'
    ;

CombiningCharacter
    : '<Unicode combining character classes Mn, Mc>'
    ;

FormattingCharacter
    : '<Unicode formatting character class Cf>'
    ;

UnderscoreCharacter
    : '<Unicode connection character class Pc>'
    ;

IdentifierOrKeyword
    : Identifier
    | Keyword
    ;

Normal tanımlayıcılar anahtar sözcüklerle eşleşmeyebilir, ancak kaçış tanımlayıcıları veya tür karakterine sahip tanımlayıcılar eşleşebilir. Kaçış tanımlayıcısı köşeli ayraçlarla ayrılmış bir tanımlayıcıdır. Kaçış tanımlayıcıları, anahtar sözcüklerle eşleşmesi ve tür karakterlerine sahip olmaması dışında normal tanımlayıcılarla aynı kurallara uyar.

Bu örnek adlı class bir parametreyi alan ve ardından yöntemini çağıran adlı shared paylaşılan bir yöntemle adlı boolean bir sınıfı tanımlar.

Class [class]
    Shared Sub [shared]([boolean] As Boolean)
        If [boolean] Then
            Console.WriteLine("true")
        Else
            Console.WriteLine("false")
        End If
    End Sub
End Class

Module [module]
    Sub Main()
        [class].[shared](True)
    End Sub
End Module

Tanımlayıcılar büyük/küçük harfe duyarlı değildir, bu nedenle iki tanımlayıcı, yalnızca büyük/küçük harf farklıysa aynı tanımlayıcı olarak kabul edilir. (Not. Tanımlayıcılar karşılaştırılırken Unicode Standart bire bir büyük/küçük harf eşlemeleri kullanılır ve yerel ayara özgü büyük/küçük harf eşlemeleri yoksayılır.)

Tür Karakterleri

Tür karakteri, önceki tanımlayıcının türünü belirtir. Tür karakteri tanımlayıcının bir parçası olarak kabul edilmez.

TypeCharacter
    : IntegerTypeCharacter
    | LongTypeCharacter
    | DecimalTypeCharacter
    | SingleTypeCharacter
    | DoubleTypeCharacter
    | StringTypeCharacter
    ;

IntegerTypeCharacter
    : '%'
    ;

LongTypeCharacter
    : '&'
    ;

DecimalTypeCharacter
    : '@'
    ;

SingleTypeCharacter
    : '!'
    ;

DoubleTypeCharacter
    : '#'
    ;

StringTypeCharacter
    : '$'
    ;

Bir bildirim bir tür karakteri içeriyorsa, tür karakterinin bildirimin kendisinde belirtilen türle aynı fikirde olması gerekir; aksi takdirde derleme zamanı hatası oluşur. Bildirim türü atlarsa (örneğin, bir As yan tümce belirtmezse), tür karakteri örtük olarak bildirimin türü olarak değiştirilir.

Tanımlayıcı ile tür karakteri arasında boşluk olmayabilir. Uygun karakterlerin olmaması nedeniyle , SByte, UShort, Shortveya UIntegerULongiçin tür karakteri Byteyok.

Tür karakterini kavramsal olarak türü olmayan bir tanımlayıcıya (örneğin, ad alanı adı) veya türü tür karakterinin türüyle uyuşmayan bir tanımlayıcıya eklemek derleme zamanı hatasına neden olur.

Aşağıdaki örnekte tür karakterlerinin kullanımı gösterilmektedir:

' The follow line will cause an error: standard modules have no type.
Module Test1#
End Module

Module Test2

    ' This function takes a Long parameter and returns a String.
    Function Func$(Param&)

        ' The following line causes an error because the type character
        ' conflicts with the declared type of Func and Param.
        Func# = CStr(Param@)

        ' The following line is valid.
        Func$ = CStr(Param&)
    End Function
End Module

Tür karakteri, hem tür karakteri ! hem de dilde ayırıcı olarak kullanılabilmesi için özel bir sorun sunar. Belirsizliği kaldırmak için, ! izleyen karakter tanımlayıcıyı başlatamadığı sürece karakter tür karakteridir. Bunu yapabilirse, ! karakter bir tür karakteri değil ayırıcıdır.

Anahtar sözcükler

Anahtar sözcük, dil yapısında özel anlamı olan bir sözcüktür. Tüm anahtar sözcükler dile göre ayrılır ve tanımlayıcılar kaçılmadığı sürece tanımlayıcı olarak kullanılamaz. (Not.EndIf, GoSub, Let, Variantve Wend artık Visual Basic'te kullanılmasa da anahtar sözcük olarak tutulur.)

Keyword
    : 'AddHandler'      | 'AddressOf'      | 'Alias'       | 'And'
    | 'AndAlso'         | 'As'             | 'Boolean'     | 'ByRef'
	| 'Byte'            | 'ByVal'          | 'Call'        | 'Case'        
	| 'Catch'           | 'CBool'          | 'CByte'       | 'CChar'       
	| 'CDate'           | 'CDbl'           | 'CDec'        | 'Char'        
	| 'CInt'            | 'Class'          | 'CLng'        | 'CObj'        
	| 'Const'           | 'Continue'       | 'CSByte'      | 'CShort'      
	| 'CSng'            | 'CStr'           | 'CType'       | 'CUInt'       
	| 'CULng'           | 'CUShort'        | 'Date'        | 'Decimal'     
	| 'Declare'         | 'Default'        | 'Delegate'    | 'Dim'         
	| 'DirectCast'      | 'Do'             | 'Double'      | 'Each'        
	| 'Else'            | 'ElseIf'         | 'End'         | 'EndIf'       
	| 'Enum'            | 'Erase'          | 'Error'       | 'Event'       
	| 'Exit'            | 'False'          | 'Finally'     | 'For'         
	| 'Friend'          | 'Function'       | 'Get'         | 'GetType'     
	| 'GetXmlNamespace' | 'Global'         | 'GoSub'       | 'GoTo'        
	| 'Handles'         | 'If'             | 'Implements'  | 'Imports'     
	| 'In'              | 'Inherits'       | 'Integer'     | 'Interface'   
	| 'Is'              | 'IsNot'          | 'Let'         | 'Lib'         
	| 'Like'            | 'Long'           | 'Loop'        | 'Me'          
	| 'Mod'             | 'Module'         | 'MustInherit' | 'MustOverride'
	| 'MyBase'          | 'MyClass'        | 'Namespace'   | 'Narrowing'   
	| 'New'             | 'Next'           | 'Not'         | 'Nothing'     
	| 'NotInheritable'  | 'NotOverridable' | 'Object'      | 'Of'          
	| 'On'              | 'Operator'       | 'Option'      | 'Optional'    
	| 'Or'              | 'OrElse'         | 'Overloads'   | 'Overridable' 
	| 'Overrides'       | 'ParamArray'     | 'Partial'     | 'Private'     
	| 'Property'        | 'Protected'      | 'Public'      | 'RaiseEvent'  
	| 'ReadOnly'        | 'ReDim'          | 'REM'         | 'RemoveHandler'
	| 'Resume'          | 'Return'         | 'SByte'       | 'Select'      
	| 'Set'             | 'Shadows'        | 'Shared'      | 'Short'       
	| 'Single'          | 'Static'         | 'Step'        | 'Stop'        
	| 'String'          | 'Structure'      | 'Sub'         | 'SyncLock'    
	| 'Then'            | 'Throw'          | 'To'          | 'True'        
	| 'Try'             | 'TryCast'        | 'TypeOf'      | 'UInteger'    
	| 'ULong'           | 'UShort'         | 'Using'       | 'Variant'     
	| 'Wend'            | 'When'           | 'While'       | 'Widening'    
	| 'With'            | 'WithEvents'     | 'WriteOnly'   | 'Xor'         
    ;

Literal İfadeler

Değişmez değer, bir türün belirli bir değerinin metinsel gösterimidir. Değişmez değer türleri Boole, tamsayı, kayan nokta, dize, karakter ve tarihtir.

Literal
    : BooleanLiteral
    | IntegerLiteral
    | FloatingPointLiteral
    | StringLiteral
    | CharacterLiteral
    | DateLiteral
    | Nothing
    ;

Boole Değişmez Değerleri

True ve False sırasıyla true ve false durumuna eşleyen türün değişmez değerleridir Boolean .

BooleanLiteral
    : 'True' | 'False'
    ;

Tamsayı Değişmez Değerleri

Tamsayı değişmez değerleri ondalık (10 tabanı), onaltılık (16 tabanı) veya sekizli (8 tabanı) olabilir. Ondalık tamsayı değişmez değeri, ondalık basamaklardan oluşan bir dizedir (0-9). Onaltılık değişmez değerden &H sonra onaltılık basamaklardan oluşan bir dize (0-9, A-F) izler. Sekizli değişmez değerin &O ardından sekizli basamaklardan oluşan bir dize (0-7) eklenir. Ondalık değişmez değerler tamsayı değişmez değerinin ondalık değerini doğrudan temsil ederken, sekizli ve onaltılık değişmez değerler tamsayı değişmez değerinin ikili değerini temsil eder (bu nedenle taşma &H8000S hatası değil -32768'dir).

IntegerLiteral
    : IntegralLiteralValue IntegralTypeCharacter?
    ;

IntegralLiteralValue
    : IntLiteral
    | HexLiteral
    | OctalLiteral
    ;

IntegralTypeCharacter
    : ShortCharacter
    | UnsignedShortCharacter
    | IntegerCharacter
    | UnsignedIntegerCharacter
    | LongCharacter
    | UnsignedLongCharacter
    | IntegerTypeCharacter
    | LongTypeCharacter
    ;

ShortCharacter
    : 'S'
    ;

UnsignedShortCharacter
    : 'US'
    ;

IntegerCharacter
    : 'I'
    ;

UnsignedIntegerCharacter
    : 'UI'
    ;

LongCharacter
    : 'L'
    ;

UnsignedLongCharacter
    : 'UL'
    ;

IntLiteral
    : Digit+
    ;

HexLiteral
    : '&' 'H' HexDigit+
    ;

OctalLiteral
    : '&' 'O' OctalDigit+
    ;

Digit
    : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
    ;

HexDigit
    : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
    | 'A' | 'B' | 'C' | 'D' | 'E' | 'F'
    ;

OctalDigit
    : '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'
    ;

Değişmez değerin türü değerine veya aşağıdaki tür karakterine göre belirlenir. Hiçbir tür karakteri belirtilmezse, türün Integer aralığındaki değerler olarak Integer, için aralığının Integer dışındaki değerler olarak Longyazılır. Bir tamsayı değişmez değerinin türü, tamsayı değişmez değerini tutmak için yeterli boyutta değilse, derleme zamanı hatasıyla sonuçlanır. (Not. için bir tür karakteri Byte yoktur çünkü en doğal karakter Bonaltılık değişmez değerdeki yasal bir karakter olacaktır.)

Floating-Point Değişmez Değerleri

Kayan nokta değişmez değeri, isteğe bağlı ondalık nokta (ASCII nokta karakteri) ve mantis ile isteğe bağlı 10 tabanından oluşan bir üsten oluşan bir tamsayı değişmez değeridir. Varsayılan olarak, kayan nokta değişmez değeri türündedir Double. Single, , Doubleveya Decimal tür karakteri belirtilirse, değişmez değer bu türdedir. Kayan nokta değişmez değerinin türü kayan nokta değişmez değerini tutmak için yeterli boyutta değilse, derleme zamanı hata sonuçları.

Not. Veri türünün bir değerde Decimal sondaki sıfırları kodlayabileceğinizi belirtmek gerekir. Belirtim şu anda bir değişmez değerdeki sondaki sıfırların derleyici Decimal tarafından kabul edilip edilmeyeceği hakkında yorum yapmaz.

FloatingPointLiteral
    : FloatingPointLiteralValue FloatingPointTypeCharacter?
    | IntLiteral FloatingPointTypeCharacter
    ;

FloatingPointTypeCharacter
    : SingleCharacter
    | DoubleCharacter
    | DecimalCharacter
    | SingleTypeCharacter
    | DoubleTypeCharacter
    | DecimalTypeCharacter
    ;

SingleCharacter
    : 'F'
    ;

DoubleCharacter
    : 'R'
    ;

DecimalCharacter
    : 'D'
    ;

FloatingPointLiteralValue
    : IntLiteral '.' IntLiteral Exponent?
    | '.' IntLiteral Exponent?
    | IntLiteral Exponent
    ;

Exponent
    : 'E' Sign? IntLiteral
    ;

Sign
    : '+'
    | '-'
    ;

Dize Sabitleri

Dize değişmez değeri, ASCII çift tırnak karakteri, Unicode sol çift tırnak karakteri veya Unicode sağ çift tırnak karakteri ile başlayan ve biten sıfır veya daha fazla Unicode karakteri dizisidir. Dize içinde, iki çift tırnak karakterinden oluşan bir dizi, dizedeki çift tırnak işaretini temsil eden bir kaçış dizisidir.

StringLiteral
    : DoubleQuoteCharacter StringCharacter* DoubleQuoteCharacter
    ;

DoubleQuoteCharacter
    : '"'
    | '<unicode left double-quote 0x201c>'
    | '<unicode right double-quote 0x201D>'
    ;

StringCharacter
    : '<Any character except DoubleQuoteCharacter>'
    | DoubleQuoteCharacter DoubleQuoteCharacter
    ;

Dize sabiti String türündedir.

Module Test
    Sub Main()

        ' This prints out: ".
        Console.WriteLine("""")

        ' This prints out: a"b.
        Console.WriteLine("a""b")

        ' This causes a compile error due to mismatched double-quotes.
        Console.WriteLine("a"b")
    End Sub
End Module

Derleyicinin sabit dize ifadesini dize değişmez değeriyle değiştirmesine izin verilir. Her dize değişmez değeri mutlaka yeni bir dize örneğine neden olmaz. İkili karşılaştırma semantiği kullanan dize eşitliği işlecine göre eşdeğer olan iki veya daha fazla dize değişmez değeri aynı programda göründüğünde, bu dize değişmez değerleri aynı dize örneğine başvurabilir. Örneğin, iki değişmez değer aynı dize örneğine başvurabileceğinden aşağıdaki programın çıkışı döndürülebilir True .

Module Test
    Sub Main()
        Dim a As Object = "he" & "llo"
        Dim b As Object = "hello"
        Console.WriteLine(a Is b)
    End Sub
End Module

Karakter Değişmez Değerleri

Karakter sabit değeri, türün Char tek bir Unicode karakterini temsil eder. İki çift tırnak karakteri, çift tırnak karakterini temsil eden bir kaçış dizisidir.

CharacterLiteral
    : DoubleQuoteCharacter StringCharacter DoubleQuoteCharacter 'C'
    ;
Module Test
    Sub Main()

        ' This prints out: a.
        Console.WriteLine("a"c)

        ' This prints out: ".
        Console.WriteLine(""""c)
    End Sub
End Module

Tarih Değişmez Değerleri

Tarih değişmez değeri, türün değeri Date olarak ifade edilen belirli bir anı temsil eder.

DateLiteral
    : '#' WhiteSpace* DateOrTime WhiteSpace* '#'
    ;

DateOrTime
    : DateValue WhiteSpace+ TimeValue
    | DateValue
    | TimeValue
    ;

DateValue
    : MonthValue '/' DayValue '/' YearValue
    | MonthValue '-' DayValue '-' YearValue
    ;

TimeValue
    : HourValue ':' MinuteValue ( ':' SecondValue )? WhiteSpace* AMPM?
    | HourValue WhiteSpace* AMPM
    ;

MonthValue
    : IntLiteral
    ;

DayValue
    : IntLiteral
    ;

YearValue
    : IntLiteral
    ;

HourValue
    : IntLiteral
    ;

MinuteValue
    : IntLiteral
    ;

SecondValue
    : IntLiteral
    ;

AMPM
    : 'AM' | 'PM'
    ;    

Değişmez değer hem tarih hem de saat, yalnızca tarih veya yalnızca bir saat belirtebilir. Tarih değeri atlanırsa Gregoryen takvimde 1 yılın 1 Ocak'ı varsayılır. Zaman değeri atlanırsa, 12:00:00 varsayılır.

Bir tarih değerinde yıl değerini yorumlamayla ilgili sorunları önlemek için, yıl değeri iki basamak olamaz. AD/CE birinci yüzyılda bir tarih ifade ederken, baştaki sıfırlar belirtilmelidir.

Saat değeri 24 saatlik değer veya 12 saatlik bir değer kullanılarak belirtilebilir; veya değerini atlayan AMPM saat değerlerinin 24 saatlik değerler olduğu varsayılır. Saat değeri dakikaları atlarsa, değişmez değer 0 varsayılan olarak kullanılır. Bir zaman değeri saniyeleri atlarsa, değişmez değer 0 varsayılan olarak kullanılır. Hem dakika hem de saniye atlanırsa AM veya PM belirtilmelidir. Belirtilen tarih değeri tür aralığının Date dışındaysa, derleme zamanı hatası oluşur.

Aşağıdaki örnek birkaç tarih değişmez değeri içerir.

Dim d As Date

d = # 8/23/1970 3:45:39AM #
d = # 8/23/1970 #              ' Date value: 8/23/1970 12:00:00AM.
d = # 3:45:39AM #              ' Date value: 1/1/1 3:45:39AM.
d = # 3:45:39 #                ' Date value: 1/1/1 3:45:39AM.
d = # 13:45:39 #               ' Date value: 1/1/1 1:45:39PM.
d = # 1AM #                    ' Date value: 1/1/1 1:00:00AM.
d = # 13:45:39PM #             ' This date value is not valid.

Hiçbir şey

Nothing özel bir değişmez değerdir; türü yoktur ve tür parametreleri dahil olmak üzere tür sistemindeki tüm türlere dönüştürülebilir. Belirli bir türe dönüştürüldüğünde, bu türün varsayılan değerinin eşdeğeridir.

Nothing
    : 'Nothing'
    ;

Ayırıcı

Aşağıdaki ASCII karakterleri ayırıcılardır:

Separator
    : '(' | ')' | '{' | '}' | '!' | '#' | ',' | '.' | ':' | '?'
    ;

İşleç Karakterleri

Aşağıdaki ASCII karakterleri veya karakter dizileri işleçleri belirtir:

Operator
    : '&' | '*' | '+' | '-' | '/' | '\\' | '^' | '<' | '=' | '>'
    ;