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 + -
显示快捷键?