示例#1
0
    def stateParseDeclarations(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, Process.BeginBlock):
            parserState.NextState = cls.stateParseStatements
            return
        elif isinstance(currentBlock, Process.EndBlock):
            parserState.NextGroup = cls(parserState.LastGroup,
                                        parserState.BlockMarker,
                                        parserState.Block)
            parserState.Pop()
            parserState.BlockMarker = None
            return
        elif isinstance(currentBlock, (LinebreakBlock, IndentationBlock)):
            parserState.PushState = WhitespaceGroup.stateParse
            parserState.NextGroup = WhitespaceGroup(parserState.LastGroup,
                                                    currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        elif isinstance(currentBlock, CommentBlock):
            parserState.PushState = CommentGroup.stateParse
            parserState.NextGroup = CommentGroup(parserState.LastGroup,
                                                 currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        else:
            for block in cls.DECLARATION_SIMPLE_BLOCKS:
                if isinstance(currentBlock, block):
                    group = cls.DECLARATION_SIMPLE_BLOCKS[block]
                    parserState.PushState = group.stateParse
                    parserState.BlockMarker = currentBlock
                    parserState.ReIssue = True
                    return

            for block in cls.DECLARATION_COMPOUND_BLOCKS:
                if isinstance(currentBlock, block):
                    group = cls.DECLARATION_COMPOUND_BLOCKS[block]
                    parserState.PushState = group.stateParse
                    parserState.BlockMarker = currentBlock
                    parserState.ReIssue = True
                    return

        if isinstance(currentBlock, EndOfDocumentBlock):
            parserState.NextGroup = EndOfDocumentGroup(currentBlock)
            return

        raise GroupParserException(
            "End of process declarative region not found.", currentBlock)
示例#2
0
    def stateParseStatements(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, Architecture.EndBlock):
            parserState.NextGroup = cls(parserState.LastGroup,
                                        parserState.BlockMarker,
                                        parserState.Block)
            parserState.Pop()
            parserState.BlockMarker = None
            return
        elif isinstance(currentBlock, (LinebreakBlock, IndentationBlock)):
            parserState.PushState = WhitespaceGroup.stateParse
            parserState.NextGroup = WhitespaceGroup(parserState.LastGroup,
                                                    currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        elif isinstance(currentBlock, CommentBlock):
            parserState.PushState = CommentGroup.stateParse
            parserState.NextGroup = CommentGroup(parserState.LastGroup,
                                                 currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        else:
            for block in cls.STATEMENT_SIMPLE_BLOCKS:
                if isinstance(currentBlock, block):
                    group = cls.STATEMENT_SIMPLE_BLOCKS[block]
                    parserState.PushState = group.stateParse
                    parserState.BlockMarker = currentBlock
                    parserState.ReIssue = True
                    return

            for block in cls.STATEMENT_COMPOUND_BLOCKS:
                if isinstance(currentBlock, block):
                    group = cls.STATEMENT_COMPOUND_BLOCKS[block]
                    parserState.PushState = group.stateParse
                    parserState.BlockMarker = currentBlock
                    parserState.ReIssue = True
                    return

        if isinstance(currentBlock, EndOfDocumentBlock):
            parserState.NextGroup = EndOfDocumentGroup(currentBlock)
            return

        raise GroupParserException(
            "End of architecture declaration not found.".format(
                block=currentBlock.__class__.__qualname__), currentBlock)
示例#3
0
    def stateParseGenerics(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, GenericList.OpenBlock):
            parserState.NextState = cls.stateParseParameters
            parserState.PushState = GenericListGroup.stateParse
            parserState.NextGroup = GenericListGroup(parserState.LastGroup,
                                                     currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        elif isinstance(currentBlock, ParameterList.OpenBlock):
            parserState.NextState = cls.stateParseDeclarations
            parserState.PushState = ParameterListGroup.stateParse
            parserState.NextGroup = ParameterListGroup(parserState.LastGroup,
                                                       currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        elif isinstance(currentBlock, Function.ReturnTypeBlock):
            if isinstance(currentBlock.EndToken, EndToken):
                parserState.Pop()
            else:
                parserState.NextState = cls.stateParse2
                parserState.ReIssue = True
            return
        elif isinstance(currentBlock, (LinebreakBlock, IndentationBlock)):
            parserState.PushState = WhitespaceGroup.stateParse
            parserState.NextGroup = WhitespaceGroup(parserState.LastGroup,
                                                    currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        elif isinstance(currentBlock, CommentBlock):
            parserState.PushState = CommentGroup.stateParse
            parserState.NextGroup = CommentGroup(parserState.LastGroup,
                                                 currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return

        if isinstance(currentBlock, EndOfDocumentBlock):
            parserState.NextGroup = EndOfDocumentGroup(currentBlock)
            return

        raise BlockParserException("End of generic clause not found.",
                                   currentBlock)
示例#4
0
    def stateParseStatements(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, Function.EndBlock):
            # parserState.NextGroup =   cls(parserState.LastGroup, parserState.BlockMarker, parserState.Block)
            parserState.Pop()
            return
        elif isinstance(currentBlock, (LinebreakBlock, IndentationBlock)):
            parserState.PushState = WhitespaceGroup.stateParse
            parserState.NextGroup = WhitespaceGroup(parserState.LastGroup,
                                                    currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        elif isinstance(currentBlock, CommentBlock):
            parserState.PushState = CommentGroup.stateParse
            parserState.NextGroup = CommentGroup(parserState.LastGroup,
                                                 currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        else:
            for block in cls.STATEMENT_SIMPLE_BLOCKS:
                if isinstance(currentBlock, block):
                    group = cls.STATEMENT_SIMPLE_BLOCKS[block]
                    parserState.PushState = group.stateParse
                    parserState.BlockMarker = currentBlock
                    parserState.ReIssue = True
                    return

            for block in cls.STATEMENT_COMPOUND_BLOCKS:
                if isinstance(currentBlock, block):
                    group = cls.STATEMENT_COMPOUND_BLOCKS[block]
                    parserState.PushState = group.stateParse
                    parserState.BlockMarker = currentBlock
                    parserState.ReIssue = True
                    return

        if isinstance(currentBlock, EndOfDocumentBlock):
            parserState.NextGroup = EndOfDocumentGroup(currentBlock)
            return

        raise BlockParserException("End of function declaration not found.",
                                   currentBlock)
示例#5
0
    def stateParse(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, Context.NameBlock):
            parserState.NextGroup = cls(parserState.LastGroup, currentBlock)
            parserState.BlockMarker = currentBlock
            #parserState.NextState =   cls.stateParseGenerics
            return
        elif isinstance(currentBlock, Context.EndBlock):
            #parserState.NextGroup =   cls(parserState.LastGroup, parserState.BlockMarker, parserState.Block)
            #parserState.Pop()
            #parserState.BlockMarker = None
            return
        elif isinstance(currentBlock, (LinebreakBlock, IndentationBlock)):
            parserState.PushState = WhitespaceGroup.stateParse
            parserState.NextGroup = WhitespaceGroup(parserState.LastGroup,
                                                    currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        elif isinstance(currentBlock, CommentBlock):
            parserState.PushState = CommentGroup.stateParse
            parserState.NextGroup = CommentGroup(parserState.LastGroup,
                                                 currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        else:
            for block in cls.SIMPLE_BLOCKS:
                if isinstance(currentBlock, block):
                    group = cls.SIMPLE_BLOCKS[block]
                    parserState.PushState = group.stateParse
                    parserState.BlockMarker = currentBlock
                    parserState.ReIssue = True
                    return

        if isinstance(currentBlock, EndOfDocumentBlock):
            parserState.NextGroup = EndOfDocumentGroup(currentBlock)
            return

        raise GroupParserException(
            "End of context declaration not found.".format(
                block=currentBlock.__class__.__qualname__), currentBlock)
示例#6
0
    def stateParse(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, GenericList.OpenBlock):
            return
        elif isinstance(
                currentBlock,
                pyVHDLParser.Blocks.InterfaceObject.InterfaceConstantBlock):
            parserState.PushState = GenericListItemGroup.stateParse
            parserState.NextGroup = GenericListItemGroup(
                parserState.LastGroup, currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        elif isinstance(currentBlock, GenericList.CloseBlock):
            parserState.Pop()
            return
        elif isinstance(currentBlock, (LinebreakBlock, IndentationBlock)):
            parserState.PushState = WhitespaceGroup.stateParse
            parserState.NextGroup = WhitespaceGroup(parserState.LastGroup,
                                                    currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return
        elif isinstance(currentBlock, CommentBlock):
            parserState.PushState = CommentGroup.stateParse
            parserState.NextGroup = CommentGroup(parserState.LastGroup,
                                                 currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.ReIssue = True
            return

        if isinstance(currentBlock, EndOfDocumentBlock):
            parserState.NextGroup = EndOfDocumentGroup(currentBlock)
            return

        raise GroupParserException("End of generic list not found.",
                                   currentBlock)