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