parser(expressions).vb
来自「大名鼎鼎的mono是.NET平台的跨平台(支持linux」· VB 代码 · 共 1,598 行 · 第 1/5 页
VB
1,598 行
End Function Private Function ParseCUIntExpression(ByVal Parent As ParsedObject) As CUIntExpression Dim result As New CUIntExpression(Parent) Dim m_Expression As Expression tm.AcceptIfNotInternalError(KS.CUInt) m_Expression = ParseParenthesizedExpression(Parent) If m_Expression Is Nothing Then Helper.ErrorRecoveryNotImplemented() result.Init(m_Expression) Return result End Function Private Function ParseCULngExpression(ByVal Parent As ParsedObject) As CULngExpression Dim result As New CULngExpression(Parent) Dim m_Expression As Expression tm.AcceptIfNotInternalError(KS.CULng) m_Expression = ParseParenthesizedExpression(Parent) If m_Expression Is Nothing Then Helper.ErrorRecoveryNotImplemented() result.Init(m_Expression) Return result End Function Private Function ParseCUShortExpression(ByVal Parent As ParsedObject) As CUShortExpression Dim result As New CUShortExpression(Parent) Dim m_Expression As Expression tm.AcceptIfNotInternalError(KS.CUShort) m_Expression = ParseParenthesizedExpression(Parent) If m_Expression Is Nothing Then Helper.ErrorRecoveryNotImplemented() result.Init(m_Expression) Return result End Function ''' <summary> ''' VariableIdentifier ::= Identifier [ ArrayNameModifier ] ''' </summary> ''' <remarks></remarks> Private Function ParseVariableIdentifier(ByVal Parent As ParsedObject) As VariableIdentifier Dim result As New VariableIdentifier(Parent) Dim m_Identifier As Token = Nothing Dim m_ArrayNameModifier As ArrayNameModifier If tm.CurrentToken.IsIdentifier = False Then Compiler.Report.ShowMessage(Messages.VBNC30203) Return Nothing End If If tm.AcceptIdentifier(m_Identifier) = False Then Helper.ErrorRecoveryNotImplemented() If vbnc.ArrayNameModifier.CanBeMe(tm) Then m_ArrayNameModifier = ParseArrayNameModifier(result) If m_ArrayNameModifier Is Nothing Then Helper.ErrorRecoveryNotImplemented() Else m_ArrayNameModifier = Nothing End If result.Init(m_Identifier, m_ArrayNameModifier) Return result End Function ''' <summary> ''' RaiseEventStatement ::= "RaiseEvent" IdentifierOrKeyword [ "(" [ ArgumentList ] ")" ] StatementTerminator ''' </summary> ''' <remarks></remarks> Private Function ParseRaiseEventStatement(ByVal Parent As ParsedObject) As RaiseEventStatement Dim result As New RaiseEventStatement(Parent) Dim m_Event As SimpleNameExpression Dim m_Arguments As ArgumentList Dim m_Identifier As IdentifierOrKeyword tm.AcceptIfNotInternalError(KS.RaiseEvent) m_Identifier = ParseIdentifierOrKeyword(result) If m_Identifier Is Nothing Then Helper.ErrorRecoveryNotImplemented() m_Event = New SimpleNameExpression(result) m_Event.Identifier = Token.CreateIdentifierToken(m_Identifier.Location, m_Identifier.Identifier, TypeCharacters.Characters.None, m_Identifier.IsKeyword) If tm.Accept(KS.LParenthesis) Then If tm.Accept(KS.RParenthesis) = False Then m_Arguments = ParseArgumentList(result) If m_Arguments Is Nothing Then Helper.ErrorRecoveryNotImplemented() If tm.AcceptIfNotError(KS.RParenthesis) = False Then Helper.ErrorRecoveryNotImplemented() Else m_Arguments = New ArgumentList(result) End If Else m_Arguments = Nothing End If result.Init(m_Event, m_Arguments) Return result End Function ''' <summary> ''' InvocationExpression: Expression [ "(" [ ArgumentList ] ")" ] ''' IndexExpression: Expression "(" [ ArgumentList ] ")" ''' Note that for the index expression the parenthesis are not optional. ''' This is reflected by the fact that m_ArgumentList is not nothing if ''' parenthesis are provided. ''' </summary> ''' <remarks></remarks> Private Function ParseInvocationOrIndexExpression(ByVal Parent As ParsedObject, ByVal First As Expression) As InvocationOrIndexExpression Dim result As New InvocationOrIndexExpression(Parent) Dim m_Expression As Expression Dim m_ArgumentList As ArgumentList m_Expression = First If tm.Accept(KS.LParenthesis) Then If tm.Accept(KS.RParenthesis) = False Then m_ArgumentList = ParseArgumentList(result) If tm.AcceptIfNotError(KS.RParenthesis) = False Then Helper.ErrorRecoveryNotImplemented() Else m_ArgumentList = New ArgumentList(result) End If Else m_ArgumentList = Nothing End If result.Init(m_Expression, m_ArgumentList) Return result End Function ''' <summary> ''' ParenthesizedExpression ::= "(" Expression ")" ''' </summary> ''' <remarks></remarks> Private Function ParseParenthesizedExpression(ByVal Parent As ParsedObject) As ParenthesizedExpression Dim result As New ParenthesizedExpression(parent) Dim m_Expression As Expression tm.AcceptIfNotInternalError(KS.LParenthesis) m_Expression = ParseExpression(result) If m_Expression Is Nothing Then Helper.ErrorRecoveryNotImplemented() If tm.AcceptIfNotError(KS.RParenthesis) = False Then Helper.NotImplemented() result.init(m_Expression) Return result End Function Private Function ParseUnaryMinusExpression(ByVal Info As ExpressionParseInfo) As UnaryMinusExpression Dim result As New UnaryMinusExpression(Info.Parent) Dim m_Expression As Expression tm.AcceptIfNotInternalError(KS.Minus) m_Expression = ParseExponent(Info) If m_Expression Is Nothing Then Helper.ErrorRecoveryNotImplemented() result.Init(m_Expression) Return result End Function Private Function ParseCTypeExpression(ByVal Parent As ParsedObject, ByVal GetKeyword As KS) As CTypeExpression Dim result As CTypeExpression = Nothing Dim m_DestinationType As TypeName Dim m_Expression As Expression Select Case GetKeyword Case KS.CType result = New CTypeExpression(Parent) Case KS.DirectCast result = New DirectCastExpression(Parent) Case KS.TryCast result = New TryCastExpression(Parent) Case Else Throw New InternalException(result) End Select tm.AcceptIfNotInternalError(GetKeyword) If tm.AcceptIfNotError(KS.LParenthesis) = False Then Helper.ErrorRecoveryNotImplemented() m_Expression = ParseExpression(result) If tm.AcceptIfNotError(KS.Comma) = False Then Helper.ErrorRecoveryNotImplemented() m_DestinationType = ParseTypeName(result) If m_DestinationType Is Nothing Then Helper.ErrorRecoveryNotImplemented() If tm.AcceptIfNotError(KS.RParenthesis) = False Then Helper.ErrorRecoveryNotImplemented() result.Init(m_Expression, m_DestinationType) Return result End Function Private Function ParseUnaryNotExpression(ByVal Parent As ParsedObject) As UnaryNotExpression Dim result As New UnaryNotExpression(Parent) Dim m_Expression As Expression tm.AcceptIfNotInternalError(KS.Not) m_Expression = ParseExpression(result) result.Init(m_Expression) Return result End Function Private Function ParseUnaryPlusExpression(ByVal Info As ExpressionParseInfo) As UnaryPlusExpression Dim result As New UnaryPlusExpression(Info.Parent) Dim m_Expression As Expression tm.AcceptIfNotInternalError(KS.Add) m_Expression = ParseExponent(Info) If m_Expression Is Nothing Then Helper.ErrorRecoveryNotImplemented() result.Init(m_Expression) Return result End Function Private Function ParseArrayInitializerExpression(ByVal Parent As ParsedObject) As ArrayInitializerExpression Dim result As New ArrayInitializerExpression(Parent) Dim m_Initializers As New Expressions() tm.AcceptIfNotInternalError(KS.LBrace) If tm.CurrentToken <> KS.RBrace Then Do Dim newExp As Expression newExp = ParseExpression(result) If newExp Is Nothing Then Helper.ErrorRecoveryNotImplemented() m_Initializers.Add(newExp) Loop While tm.Accept(KS.Comma) End If If tm.Accept(KS.RBrace) = False Then Helper.ErrorRecoveryNotImplemented() result.Init(m_Initializers) Return result End Function ''' <summary> ''' LoopControlVariable ::= ''' Identifier [ ArrayNameModifier ] "As" TypeName | ''' Expression ''' </summary> ''' <remarks></remarks> Private Function ParseLoopControlVariable(ByVal Parent As ParsedObject) As LoopControlVariable Dim result As New LoopControlVariable(Parent) Dim m_Identifier As Token = Nothing Dim m_ArrayNameModifier As ArrayNameModifier = Nothing Dim m_TypeName As TypeName = Nothing Dim m_Expression As Expression = Nothing 'First try first option Dim tmpI As Token = Nothing, tmpANM As ArrayNameModifier = Nothing Dim iCurrent As RestorablePoint = tm.GetRestorablePoint Dim doExpression As Boolean = True If tm.AcceptIdentifier(tmpI) Then If ArrayNameModifier.CanBeMe(tm) Then tmpANM = ParseArrayNameModifier(result) If tmpANM Is Nothing Then Helper.ErrorRecoveryNotImplemented() End If If tmpANM Is Nothing AndAlso tm.Accept(KS.As) Then m_Identifier = tmpI m_ArrayNameModifier = tmpANM m_TypeName = ParseTypeName(result) If m_TypeName Is Nothing Then Helper.ErrorRecoveryNotImplemented() doExpression = False End If End If If doExpression Then tm.RestoreToPoint(iCurrent) m_Expression = ParseExpression(New ExpressionParseInfo(result, True)) If m_Expression Is Nothing Then Helper.ErrorRecoveryNotImplemented() Else tm.IgnoreRestoredPoint() End If result.Init(m_Identifier, m_ArrayNameModifier, m_TypeName, m_Expression) Return result End Function ''' <summary> ''' NewExpression ::= ObjectCreationExpression | ArrayCreationExpression | DelegateCreationExpression ''' </summary> ''' <remarks></remarks> Private Function ParseNewExpression(ByVal Parent As ParsedObject) As NewExpression Dim result As New NewExpression(Parent) Dim iCurrent As RestorablePoint = tm.GetRestorablePoint Dim bShowingErrors As Boolean Dim ace As ArrayCreationExpression bShowingErrors = Me.ShowErrors Me.m_ShowErrors = False
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?