parser(members2).vb

来自「大名鼎鼎的mono是.NET平台的跨平台(支持linux」· VB 代码 · 共 834 行 · 第 1/3 页

VB
834
字号
        Return result    End Function    ''' <summary>    ''' ExternalFunctionDeclaration  ::=    '''	[  Attributes  ]  [  ExternalMethodModifier+  ]  "Declare" [  CharsetModifier  ] "Function" Identifier    '''		LibraryClause  [  AliasClause  ]  [  (  [  ParameterList  ]  )  ]  [  As  [  Attributes  ]  TypeName  ]    '''		StatementTerminator    '''     ''' CharsetModifier  ::=  "Ansi" | "Unicode" |  "Auto"    ''' </summary>    ''' <remarks></remarks>    Private Function ParseExternalFunctionDeclaration(ByVal Parent As TypeDeclaration, ByVal Info As ParseAttributableInfo) As ExternalFunctionDeclaration        Dim result As New ExternalFunctionDeclaration(Parent)        Dim m_Modifiers As Modifiers = Nothing        Dim m_CharsetModifier As KS        Dim m_Identifier As Token = Nothing        Dim m_LibraryClause As LibraryClause = Nothing        Dim m_AliasClause As AliasClause = Nothing        Dim m_ParameterList As ParameterList = Nothing        Dim m_ReturnTypeAttributes As Attributes = Nothing        Dim m_TypeName As TypeName = Nothing        m_Modifiers = ParseModifiers(result, ModifierMasks.ExternalMethodModifiers)        tm.AcceptIfNotInternalError(KS.Declare)        If tm.CurrentToken.Equals(ModifierMasks.CharSetModifiers) Then            m_CharsetModifier = tm.CurrentToken.Keyword            tm.NextToken()        End If        tm.AcceptIfNotInternalError(KS.Function)        If tm.CurrentToken.IsIdentifier = False Then            Helper.ErrorRecoveryNotImplemented()        End If        m_Identifier = tm.CurrentToken        tm.NextToken()        m_LibraryClause = ParseLibraryClause(result)        If m_LibraryClause Is Nothing Then Helper.ErrorRecoveryNotImplemented()        If AliasClause.IsMe(tm) Then            m_AliasClause = ParseAliasClause(result)            If m_AliasClause Is Nothing Then Helper.ErrorRecoveryNotImplemented()        End If        If tm.Accept(KS.LParenthesis) Then            m_ParameterList = New ParameterList(result)            If tm.Accept(KS.RParenthesis) = False Then                If ParseList(Of Parameter)(m_ParameterList, New ParseDelegate_Parent(Of Parameter)(AddressOf ParseParameter), m_ParameterList) = False Then                    Helper.ErrorRecoveryNotImplemented()                End If                If tm.AcceptIfNotError(KS.RParenthesis) = False Then Helper.ErrorRecoveryNotImplemented()            End If        End If        If tm.Accept(KS.As) Then            If vbnc.Attributes.IsMe(tm) Then                If ParseAttributes(result, m_ReturnTypeAttributes) = False Then Helper.ErrorRecoveryNotImplemented()            End If            m_TypeName = ParseTypeName(result)            If m_TypeName Is Nothing Then Helper.ErrorRecoveryNotImplemented()        End If        If tm.AcceptEndOfStatement(, True) = False Then Helper.ErrorRecoveryNotImplemented()        result.Init(Info.Attributes, m_Modifiers, m_CharsetModifier, m_Identifier, m_LibraryClause, m_AliasClause, m_ParameterList, m_ReturnTypeAttributes, m_TypeName)        Return result    End Function    ''' <summary>    ''' AliasClause  ::=  "Alias" StringLiteral    ''' </summary>    ''' <remarks></remarks>    Private Function ParseAliasClause(ByVal Parent As ParsedObject) As AliasClause        Dim result As New AliasClause(Parent)        Dim m_StringLiteral As Token = Nothing        tm.AcceptIfNotInternalError(KS.Alias)        If tm.CurrentToken.IsStringLiteral Then            m_StringLiteral = tm.CurrentToken        Else            Helper.NotImplemented() 'TODO: Adderror        End If        result.Init(m_StringLiteral)        Return result    End Function    ''' <summary>    ''' LibraryClause  ::=  "Lib" StringLiteral    ''' </summary>    ''' <remarks></remarks>    Private Function ParseLibraryClause(ByVal Parent As ParsedObject) As LibraryClause        Dim result As New LibraryClause(Parent)        Dim m_StringLiteral As Token        tm.AcceptIfNotInternalError(KS.Lib)        If tm.CurrentToken.IsStringLiteral Then            m_StringLiteral = tm.CurrentToken            tm.NextToken()        Else            Helper.NotImplemented() 'TODO: Adderror            m_StringLiteral = Nothing        End If        result.Init(m_StringLiteral)        Return result    End Function    ''' <summary>    ''' ConstantDeclarator  ::=  Identifier  [  As  TypeName  ]  =  ConstantExpression  StatementTerminator    ''' TODO: Is this a spec bug? ------------------------------------------------------^^^^^^^^^^^^^^^^^^^?    ''' </summary>    ''' <remarks></remarks>    Private Function ParseConstantDeclaration(ByVal Parent As ParsedObject, ByVal Info As ParseAttributableInfo, ByVal Modifiers As Modifiers) As ConstantDeclaration        Dim result As New ConstantDeclaration(Parent)        Dim m_Identifier As Token = Nothing        Dim m_TypeName As TypeName = Nothing        Dim m_ConstantExpression As Expression = Nothing        If tm.AcceptIdentifier(m_Identifier) = False Then Helper.ErrorRecoveryNotImplemented()        If tm.Accept(KS.As) Then            m_TypeName = ParseTypeName(result)            If m_TypeName Is Nothing Then Helper.ErrorRecoveryNotImplemented()        End If        If tm.AcceptIfNotError(KS.Equals) = False Then Helper.ErrorRecoveryNotImplemented()        m_ConstantExpression = ParseExpression(result)        If m_ConstantExpression Is Nothing Then Helper.ErrorRecoveryNotImplemented()        result.Init(Info.Attributes, Modifiers, m_Identifier, m_TypeName, m_ConstantExpression)        'Don't parse a StatementTerminator as the VB spec says.        Return result    End Function    ''' <summary>    ''' LocalDeclarationStatement  ::=  LocalModifier VariableDeclarators StatementTerminator    ''' </summary>    Private Function ParseLocalDeclarationStatement(ByVal Parent As CodeBlock) As Generic.List(Of VariableDeclaration)        Dim result As Generic.List(Of VariableDeclaration)        Dim m_Modifiers As Modifiers        m_Modifiers = ParseModifiers(Parent, ModifierMasks.LocalModifiers)        result = ParseVariableDeclarators(Parent, m_Modifiers, New ParseAttributableInfo(Compiler, Nothing))        If result Is Nothing Then Helper.ErrorRecoveryNotImplemented()        Return result    End Function    ''' <summary>    ''' VariableMemberDeclaration  ::=	[  Attributes  ]  VariableModifier+  VariableDeclarators  StatementTerminator    ''' </summary>    Private Function ParseVariableMemberDeclaration(ByVal Parent As ParsedObject, ByVal Info As ParseAttributableInfo) As Generic.List(Of VariableDeclaration)        Dim result As Generic.List(Of VariableDeclaration)        Dim m_VariableModifiers As Modifiers        m_VariableModifiers = ParseModifiers(Parent, ModifierMasks.VariableModifiers)        result = ParseVariableDeclarators(Parent, m_VariableModifiers, Info)        If tm.FindNewLineAndShowError() = False Then Helper.ErrorRecoveryNotImplemented()        Return result    End Function    ''' <summary>    ''' VariableDeclarators  ::= VariableDeclarator  |	VariableDeclarators  ,  VariableDeclarator    ''' </summary>    ''' <remarks></remarks>    Private Function ParseVariableDeclarators(ByVal Parent As ParsedObject, ByVal Modifiers As Modifiers, ByVal Info As ParseAttributableInfo) As Generic.List(Of VariableDeclaration)        Dim result As New Generic.List(Of VariableDeclaration)        Do            Dim tmp As New Generic.List(Of VariableDeclaration)            tmp = ParseVariableDeclarator(Parent, Modifiers, Info)            If tmp Is Nothing Then Helper.ErrorRecoveryNotImplemented()            result.AddRange(tmp)        Loop While tm.Accept(KS.Comma)        Return result    End Function    ''' <summary>    ''' VariableDeclarator  ::=    '''  	VariableIdentifiers  [  As  [  New  ]  TypeName  [  (  ArgumentList  )  ]  ]  |    '''     VariableIdentifier   [  As  TypeName  ]  [  =  VariableInitializer  ]    ''' </summary>    ''' <remarks></remarks>    Private Function ParseVariableDeclarator(ByVal Parent As ParsedObject, ByVal Modifiers As Modifiers, ByVal Info As ParseAttributableInfo) As Generic.List(Of VariableDeclaration)        Dim m_VariableIdentifiers As VariableIdentifiers        Dim m_IsNew As Boolean        Dim m_TypeName As TypeName        Dim m_VariableInitializer As VariableInitializer        Dim m_ArgumentList As ArgumentList        m_VariableIdentifiers = ParseVariableIdentifiers(Parent)        If m_VariableIdentifiers Is Nothing Then Helper.ErrorRecoveryNotImplemented()        If tm.Accept(KS.As) Then            m_IsNew = tm.Accept(KS.[New])            If m_IsNew Then                'Arrays not allowed.                Dim m_NonArrayTypeName As NonArrayTypeName                m_NonArrayTypeName = ParseNonArrayTypeName(Parent)                If m_NonArrayTypeName Is Nothing Then Helper.ErrorRecoveryNotImplemented()                m_TypeName = New TypeName(Parent, m_NonArrayTypeName)            Else                'Arrays allowed.                m_TypeName = ParseTypeName(Parent)                If m_TypeName Is Nothing Then Helper.ErrorRecoveryNotImplemented()            End If        Else            m_TypeName = Nothing        End If        If tm.Accept(KS.Equals) Then            m_VariableInitializer = ParseVariableInitializer(Parent)            If m_VariableInitializer Is Nothing Then Helper.ErrorRecoveryNotImplemented()            m_ArgumentList = Nothing        ElseIf tm.Accept(KS.LParenthesis) Then            If tm.Accept(KS.RParenthesis) = False Then                m_ArgumentList = ParseArgumentList(Parent)                If m_ArgumentList Is Nothing Then Helper.ErrorRecoveryNotImplemented()                If tm.AcceptIfNotError(KS.RParenthesis) = False Then Helper.ErrorRecoveryNotImplemented()            Else                m_ArgumentList = New ArgumentList(Parent)            End If            m_VariableInitializer = Nothing        Else            m_VariableInitializer = Nothing            m_ArgumentList = Nothing        End If        Dim result As New Generic.List(Of VariableDeclaration)        For Each identifier As VariableIdentifier In m_VariableIdentifiers            result.Add(New VariableDeclaration(Parent, Info.Attributes, Modifiers, identifier, m_IsNew, m_TypeName, m_VariableInitializer, m_ArgumentList))        Next        Return result    End Function    Private Function ParseInterfacePropertyMemberDeclaration(ByVal Parent As TypeDeclaration, ByVal Info As ParseAttributableInfo) As InterfacePropertyMemberDeclaration        Dim result As New InterfacePropertyMemberDeclaration(Parent)        Dim m_Modifiers As Modifiers = Nothing        Dim m_Signature As FunctionSignature = Nothing        m_Modifiers = ParseModifiers(result, ModifierMasks.InterfacePropertyModifier)        tm.AcceptIfNotInternalError(KS.Property)        m_Signature = ParseFunctionSignature(result)        If m_Signature Is Nothing Then Helper.ErrorRecoveryNotImplemented()        If tm.AcceptEndOfStatement(, True) = False Then Helper.ErrorRecoveryNotImplemented()        result.Init(Info.Attributes, m_Modifiers, m_Signature, Nothing)        Return result    End FunctionEnd Class

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?