parser(members2).vb
来自「大名鼎鼎的mono是.NET平台的跨平台(支持linux」· VB 代码 · 共 834 行 · 第 1/3 页
VB
834 行
''' MustOverrideFunctionDeclaration ::= ''' [ Attributes ] [ MustOverrideProcedureModifier+ ] "Function" FunctionSignature ''' [ HandlesOrImplements ] StatementTerminator ''' ''' </summary> ''' <remarks></remarks> Private Function ParseFunctionDeclaration(ByVal Parent As TypeDeclaration, ByVal Info As ParseAttributableInfo) As FunctionDeclaration Dim result As New FunctionDeclaration(Parent) Dim m_Modifiers As Modifiers = Nothing Dim m_Signature As FunctionSignature = Nothing Dim m_HandlesOrImplements As HandlesOrImplements = Nothing Dim m_Block As CodeBlock = Nothing m_Modifiers = ParseModifiers(result, ModifierMasks.MustOverrideProcedureModifiers) tm.AcceptIfNotInternalError(KS.Function) m_Signature = ParseFunctionSignature(result) If m_Signature Is Nothing Then Helper.ErrorRecoveryNotImplemented() If vbnc.HandlesOrImplements.IsMe(tm) Then m_HandlesOrImplements = ParseHandlesOrImplements(result) If m_HandlesOrImplements Is Nothing Then Helper.ErrorRecoveryNotImplemented() End If If tm.AcceptEndOfStatement(, True) = False Then Helper.ErrorRecoveryNotImplemented() If m_Modifiers.Is(ModifierMasks.MustOverride) = False Then m_Block = ParseCodeBlock(result, False) If m_Block Is Nothing Then Helper.ErrorRecoveryNotImplemented() If tm.AcceptIfNotError(KS.End_Function) = False Then Helper.ErrorRecoveryNotImplemented() If tm.AcceptEndOfStatement(, True) = False Then Helper.ErrorRecoveryNotImplemented() End If result.Init(Info.Attributes, m_Modifiers, m_Signature, m_HandlesOrImplements, m_Block) Return result End Function ''' <summary> ''' SubDeclaration ::= ''' [ Attributes ] [ ProcedureModifier+ ] "Sub" SubSignature [ HandlesOrImplements ] LineTerminator ''' Block ''' "End" "Sub" StatementTerminator ''' ''' MustOverrideSubDeclaration ::= ''' [ Attributes ] [ MustOverrideProcedureModifier+ ] "Sub" SubSignature [ HandlesOrImplements ] ''' StatementTerminator ''' ''' </summary> ''' <remarks></remarks> Private Function ParseSubDeclaration(ByVal Parent As TypeDeclaration, ByVal Info As ParseAttributableInfo) As SubDeclaration Dim result As New SubDeclaration(Parent) Dim m_Modifiers As Modifiers = Nothing Dim m_Signature As SubSignature = Nothing Dim m_HandlesOrImplements As HandlesOrImplements = Nothing Dim m_Block As CodeBlock = Nothing m_Modifiers = ParseModifiers(result, ModifierMasks.MustOverrideProcedureModifiers) tm.AcceptIfNotInternalError(KS.Sub) m_Signature = ParseSubSignature(result) If m_Signature Is Nothing Then Helper.ErrorRecoveryNotImplemented() If vbnc.HandlesOrImplements.IsMe(tm) Then m_HandlesOrImplements = ParseHandlesOrImplements(result) End If If tm.AcceptEndOfStatement(, True) = False Then Helper.ErrorRecoveryNotImplemented() If m_Modifiers.Is(ModifierMasks.MustOverride) = False Then m_Block = ParseCodeBlock(result, False) If m_Block Is Nothing Then Helper.ErrorRecoveryNotImplemented() If tm.AcceptIfNotError(KS.End_Sub) = False Then Helper.ErrorRecoveryNotImplemented() If tm.AcceptEndOfStatement(, True) = False Then Helper.ErrorRecoveryNotImplemented() End If result.Init(Info.Attributes, m_Modifiers, m_Signature, m_HandlesOrImplements, m_Block) Return result End Function ''' <summary> ''' HandlesOrImplements ::= HandlesClause | ImplementsClause ''' </summary> ''' <remarks></remarks> Private Function ParseHandlesOrImplements(ByVal Parent As ParsedObject) As HandlesOrImplements Dim result As New HandlesOrImplements(Parent) If vbnc.HandlesClause.IsMe(tm) Then Dim m_Clause As HandlesClause m_Clause = ParseHandlesClause(result) If m_Clause Is Nothing Then Helper.ErrorRecoveryNotImplemented() result.Init(m_Clause) ElseIf vbnc.MemberImplementsClause.IsMe(tm) Then Dim m_Clause As MemberImplementsClause m_Clause = ParseImplementsClause(result) If m_Clause Is Nothing Then Helper.ErrorRecoveryNotImplemented() result.Init(m_Clause) Else Throw New InternalException(result) End If Return result End Function ''' <summary> ''' HandlesClause ::= [ "Handles" EventHandlesList ] ''' LAMESPEC: shouldn't it be: ''' HandlesClause ::= "Handles" EventHandlesList ''' </summary> ''' <remarks></remarks> Private Function ParseHandlesClause(ByVal Parent As ParsedObject) As HandlesClause Dim result As New HandlesClause(Parent) Dim m_List As New EventHandlesList(result) tm.AcceptIfNotInternalError(KS.Handles) If ParseList(Of EventMemberSpecifier)(m_List, New ParseDelegate_Parent(Of EventMemberSpecifier)(AddressOf ParseEventMemberSpecifier), result) = False Then Helper.ErrorRecoveryNotImplemented() End If result.Init(m_List) Return result End Function ''' <summary> ''' EventMemberSpecifier ::= ''' QualifiedIdentifier "." IdentifierOrKeyword | ''' MyBase "." IdentifierOrKeyword | ''' Me "." IdentifierOrKeyword ''' </summary> ''' <remarks></remarks> Private Function ParseEventMemberSpecifier(ByVal Parent As ParsedObject) As EventMemberSpecifier Dim result As New EventMemberSpecifier(Parent) Dim m_First As Expression Dim m_Second As IdentifierOrKeyword If tm.CurrentToken = KS.MyBase Then m_First = ParseMyBaseExpression(result) ElseIf tm.CurrentToken = KS.Me Then m_First = ParseMeExpression(result) Else Dim id As Identifier id = ParseIdentifier(result) If id Is Nothing Then Helper.ErrorRecoveryNotImplemented() End If Dim sne As New SimpleNameExpression(result) sne.Init(id.Token, New TypeArgumentList(sne)) m_First = sne End If If m_First Is Nothing Then Helper.ErrorRecoveryNotImplemented() If tm.AcceptIfNotError(KS.Dot) = False Then Helper.ErrorRecoveryNotImplemented() m_Second = ParseIdentifierOrKeyword(result) If m_Second Is Nothing Then Helper.ErrorRecoveryNotImplemented() result.Init(m_First, m_Second) Return result End Function ''' <summary> ''' InterfaceSubDeclaration ::= ''' [ Attributes ] [ InterfaceProcedureModifier+ ] "Sub" SubSignature StatementTerminator ''' </summary> ''' <remarks></remarks> Private Function ParseInterfaceSubDeclaration(ByVal Parent As TypeDeclaration, ByVal Info As ParseAttributableInfo) As InterfaceSubDeclaration Dim result As New InterfaceSubDeclaration(Parent) Dim m_Modifiers As Modifiers = Nothing Dim m_Signature As SubSignature = Nothing m_Modifiers = ParseModifiers(result, ModifierMasks.InterfaceProcedureModifiers) tm.AcceptIfNotInternalError(KS.Sub) m_Signature = ParseSubSignature(Parent) If m_Signature Is Nothing Then Helper.ErrorRecoveryNotImplemented() If tm.AcceptEndOfStatement(, True) = False Then Helper.ErrorRecoveryNotImplemented() result.Init(Info.Attributes, m_Modifiers, m_Signature) Return result End Function ''' <summary> ''' InterfaceFunctionDeclaration ::= ''' [ Attributes ] [ InterfaceProcedureModifier+ ] "Function" FunctionSignature StatementTerminator ''' ''' </summary> ''' <remarks></remarks> Private Function ParseInterfaceFunctionDeclaration(ByVal Parent As TypeDeclaration, ByVal Info As ParseAttributableInfo) As InterfaceFunctionDeclaration Dim result As New InterfaceFunctionDeclaration(Parent) Dim m_Modifiers As Modifiers = Nothing Dim m_Signature As FunctionSignature = Nothing m_Modifiers = ParseModifiers(result, ModifierMasks.InterfaceProcedureModifiers) tm.AcceptIfNotInternalError(KS.Function) m_Signature = ParseFunctionSignature(result) If tm.AcceptEndOfStatement(, True) = False Then Helper.ErrorRecoveryNotImplemented() result.Init(Info.Attributes, m_Modifiers, m_Signature) Return result End Function ''' <summary> ''' ExternalSubDeclaration ::= ''' [ Attributes ] [ ExternalMethodModifier+ ] "Declare" [ CharsetModifier ] "Sub" Identifier ''' LibraryClause [ AliasClause ] [ ( [ ParameterList ] ) ] StatementTerminator ''' </summary> ''' <remarks></remarks> Private Function ParseExternalSubDeclaration(ByVal Parent As TypeDeclaration, ByVal Info As ParseAttributableInfo) As ExternalSubDeclaration Dim result As New ExternalSubDeclaration(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 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.Sub) 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.AcceptEndOfStatement(, True) = False Then Helper.ErrorRecoveryNotImplemented() result.Init(Info.Attributes, m_Modifiers, m_CharsetModifier, m_Identifier, m_LibraryClause, m_AliasClause, m_ParameterList)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?