📄 genericconstraint2.vb
字号:
'ReadOnly Property AsSpecial() As KS ' Get ' 'If IsKeyword() Then ' ' Return AsKeyword.Keyword ' 'ElseIf IsSymbol() Then ' ' Return AsSymbol.Symbol ' 'Else ' ' Throw New InternalException ' 'End If ' End Get 'End Property 'Function IsKeyword() As Boolean ' Return TypeOf Me Is KeywordToken 'End Function 'Function AsKeyword() As KeywordToken ' If IsKeyword() = False Then Throw New InternalException 'Helper.Assert(IsKeyword) ' Return DirectCast(Me, KeywordToken) 'End Function 'Function IsSymbol() As Boolean ' Return TypeOf Me Is SymbolToken 'End Function 'Function AsSymbol() As SymbolToken ' If IsSymbol() = False Then Throw New InternalException 'Helper.Assert(IsSymbol) ' Return DirectCast(Me, SymbolToken) 'End Function 'Function IsIdentifierOrKeyword() As Boolean ' Return IsIdentifier() OrElse IsKeyword() 'End Function 'Function IsIdentifier() As Boolean ' Return TypeOf Me Is IdentifierToken 'End Function 'Function AsIdentifier() As IdentifierToken ' If IsIdentifier() = False Then Throw New InternalException 'Helper.Assert(IsIdentifier) ' Return DirectCast(Me, IdentifierToken) 'End Function 'Function IsLiteral() As Boolean ' Return TypeOf Me Is ILiteralToken 'End Function 'Function AsLiteral() As ILiteralToken ' Return DirectCast(Me, ILiteralToken) 'End Function 'Function IsDateLiteral() As Boolean ' Return TypeOf Me Is DateLiteralToken 'End Function 'Function AsDateLiteral() As DateLiteralToken ' If IsDateLiteral() = False Then Throw New InternalException ' Helper.Assert(IsDateLiteral) ' Return DirectCast(Me, DateLiteralToken) 'End Function 'Function IsIntegerLiteral() As Boolean ' Return TypeOf Me Is IIntegralLiteralToken 'End Function 'Function AsIntegerLiteral() As IIntegralLiteralToken ' If IsIntegerLiteral() = False Then Throw New InternalException ' Helper.Assert(IsIntegerLiteral) ' Return DirectCast(Me, IIntegralLiteralToken) 'End Function 'Function IsCharLiteral() As Boolean ' Return TypeOf Me Is CharLiteralToken 'End Function 'Function AsCharLiteral() As CharLiteralToken ' If IsCharLiteral() = False Then Throw New InternalException ' Helper.Assert(IsCharLiteral) ' Return DirectCast(Me, CharLiteralToken) 'End Function 'Function IsStringLiteral() As Boolean ' Return TypeOf Me Is StringLiteralToken 'End Function 'Function AsStringLiteral() As StringLiteralToken ' If IsStringLiteral() = False Then Throw New InternalException ' Helper.Assert(IsStringLiteral) ' Return DirectCast(Me, StringLiteralToken) 'End Function 'Function IsDecimalLiteral() As Boolean ' Return TypeOf Me Is DecimalLiteralToken 'End Function 'Function AsDecimalLiterl() As DecimalLiteralToken ' If IsDecimalLiteral() = False Then Throw New InternalException ' Helper.Assert(IsDecimalLiteral) ' Return DirectCast(Me, DecimalLiteralToken) 'End Function ''' <summary> ''' Compares this token to any of the specified tokens. ''' Returns true if any token matches. ''' </summary> ''' <param name="AnySpecial"></param> ''' <returns></returns> ''' <remarks></remarks> Public Overridable Overloads Function Equals(ByVal ParamArray AnySpecial() As KS) As Boolean 'For i As Integer = 0 To VB.UBound(AnySpecial) ' If Equals(AnySpecial(i)) = True Then Return True 'Next Return False End Function Public Overridable Overloads Function Equals(ByVal Special As KS) As Boolean 'Compiler.Report.WriteLine(vbnc.Report.ReportLevels.Debug, "Token.Equals(KS) called on type " & Me.GetType.ToString) Return False End Function Public Overridable Overloads Function Equals(ByVal Identifier As String) As Boolean 'Compiler.Report.WriteLine(vbnc.Report.ReportLevels.Debug, "Token.Equals(String) called on type " & Me.GetType.ToString) Return False End Function Public Overrides Function Equals(ByVal obj As Object) As Boolean 'If TypeOf obj Is Token Then ' Return Equals(DirectCast(obj, Token)) 'Else ' Throw New InternalException 'End If End Function Overloads Function Equals(ByVal obj As Token) As Boolean 'If Me.IsIdentifier AndAlso obj.IsIdentifier Then ' Return Me.AsIdentifier.Equals(obj.AsIdentifier) 'ElseIf Me.IsLiteral AndAlso obj.IsLiteral Then ' Return Me.AsLiteral.Equals(obj.AsLiteral) 'Else ' Return False 'End If End Function ''' <summary> ''' Returns true if currenttoken = Public,Private,Friend,Protected or Static. ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Function IsScopeKeyword() As Boolean 'Dim keyword As KeywordToken = TryCast(Me, KeywordToken) 'If keyword IsNot Nothing Then ' Select Case keyword.Keyword ' Case KS.Public, KS.Private, KS.Friend, KS.Protected, KS.Static ' Return True ' Case KS.Else ' Return False ' End Select 'Else ' Return False 'End If End Function Function IsEndOfCode() As Boolean 'Return TypeOf Me Is EndOfCodeToken End Function Function IsEndOfFile() As Boolean 'Return TypeOf Me Is EndOfFileToken End Function Function IsEndOfStatement() As Boolean ' Return isEndOfLine(True) OrElse Equals(KS.Colon) End Function Function IsEndOfLine(Optional ByVal onlyEndOfLine As Boolean = False) As Boolean 'If onlyEndOfLine Then ' Return TypeOf Me Is EndOfLineToken AndAlso TypeOf Me Is EndOfFileToken = False 'Else ' Return TypeOf Me Is EndOfLineToken 'End If End Function#If DEBUG Then MustOverride Overloads Overrides Sub Dump(ByVal Dumper As IndentedTextWriter) MustOverride Overrides Function ToString() As String#End If Shared Operator =(ByVal Token As Token, ByVal Identifier As String) As Boolean 'If Token Is Nothing AndAlso Identifier = "" Then ' Return True 'ElseIf Token Is Nothing Then ' Return False 'ElseIf Not TypeOf Token Is IdentifierToken Then ' Return False 'Else ' Return DirectCast(Token, IdentifierToken) = Identifier 'End If End Operator Shared Operator <>(ByVal Token As Token, ByVal Identifier As String) As Boolean 'Return Not Token = Identifier End Operator Shared Operator =(ByVal Token As Token, ByVal Special As KS) As Boolean 'If Token Is Nothing Then Return False 'Return (Token.IsKeyword() AndAlso Token.AsKeyword.Keyword = Special) OrElse _ ' (Token.IsSymbol AndAlso Token.AsSymbol.Symbol = Special) End Operator Shared Operator <>(ByVal Token As Token, ByVal Special As KS) As Boolean 'Return Not Token = Special End Operator End Class Public MustInherit Class LiteralToken(Of Type) Inherits Token Implements ILiteralToken Private m_Value As Type Private m_Type As BuiltInDataTypes Private m_LiteralTypeCharacter As LiteralTypeCharacters_Characters Public Overloads Function Equals(ByVal Token As ILiteralToken) As Boolean Implements ILiteralToken.Equals 'If Me.LiteralType = Token.LiteralType Then ' Return CBool(Microsoft.VisualBasic.CompilerServices.Operators.CompareObjectEqual(Token.LiteralValue, Me.LiteralValue, False)) 'Else ' Return False 'End If End Function#If DEBUG Then Public Overrides Sub Dump(ByVal Dumper As IndentedTextWriter) 'Dumper.Write(ToString) End Sub Sub DumpLiteralTypeCharacter(ByVal Dumper As IndentedTextWriter) 'If m_LiteralTypeCharacter <> LiteralTypeCharacters_Characters.None Then ' Dumper.Write(LiteralTypeCharacters.GetTypeCharacter(m_LiteralTypeCharacter)) 'End If End Sub#End If Public Overrides Function ToString() As String 'Return m_Value.ToString End Function ReadOnly Property Literal() As Type Get 'Return m_Value End Get End Property ReadOnly Property LiteralValue() As Object Implements ILiteralToken.LiteralValue Get 'Return m_Value End Get End Property Public ReadOnly Property LiteralTypeCharacterCache() As LiteralTypeCharacters_Characters Get 'Return m_LiteralTypeCharacter End Get End Property Sub New(ByVal Span As Span, ByVal Type As BuiltInDataTypes, ByVal Compiler As Compiler, ByVal LiteralTypeCharacter As LiteralTypeCharacters_Characters, ByVal Literal As Type) MyBase.New(Span, Compiler) 'm_Type = Type 'm_LiteralTypeCharacter = LiteralTypeCharacter 'm_Value = Literal 'Helper.Assert(m_Type <> BuiltInDataTypes.Object) End Sub ReadOnly Property LiteralType() As TypeCode Implements ILiteralToken.LiteralType Get 'Return TypeResolution.BuiltInTypeToTypeCode(m_Type) End Get End Property End Class Public Class FloatingPointLiteralToken(Of Type As Structure) Inherits LiteralToken(Of Type) Sub New(ByVal Range As Span, ByVal Literal As Type, ByVal Type As BuiltInDataTypes, ByVal Compiler As Compiler, ByVal TypeCharacter As LiteralTypeCharacters_Characters) MyBase.New(Range, Type, Compiler, TypeCharacter, Literal) End Sub End Class Public Enum BuiltInDataTypes [Boolean] = KS.Boolean [Byte] = KS.Byte [Char] = KS.Char [Date] = KS.Date [Decimal] = KS.Decimal [Double] = KS.Double [Integer] = KS.Integer [Long] = KS.Long [Object] = KS.Object [Short] = KS.Short [Single] = KS.Single [String] = KS.String [SByte] = KS.[SByte] [UShort] = KS.[UShort] [UInteger] = KS.[UInteger] [ULong] = KS.[ULong] End Enum Public Enum LiteralTypeCharacters_Characters None = -1 <KSEnumString("S")> ShortCharacter <KSEnumString("US")> UnsignedShortCharacter <KSEnumString("I")> IntegerCharacter <KSEnumString("UI")> UnsignedIntegerCharacter <KSEnumString("L")> LongCharacter <KSEnumString("UL")> UnsignedLongCharacter <KSEnumString("%")> IntegerTypeCharacter <KSEnumString("&")> LongTypeCharacter <KSEnumString("F")> SingleCharacter <KSEnumString("R")> DoubleCharacter DecimalCharacter SingleTypeCharacter DoubleTypeCharacter DecimalTypeCharacter End Enum Public Class Compiler Inherits BaseObject Shared Function Main() As Integer End Function End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -