Esempio n. 1
0
    def stateParse(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, SensitivityList.OpenBlock):
            return
        elif isinstance(
                currentBlock,
            (SensitivityList.ItemBlock, SensitivityList.DelimiterBlock)):
            return
        elif isinstance(currentBlock, SensitivityList.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)
Esempio n. 2
0
    def stateParse(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, Architecture.NameBlock):
            parserState.NextState = cls.stateParseDeclarations
            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
        elif isinstance(currentBlock, EndOfDocumentBlock):
            parserState.NextGroup = EndOfDocumentGroup(currentBlock)
            return

        raise GroupParserException(
            "End of architecture declaration not found.".format(
                block=currentBlock.__class__.__qualname__), currentBlock)
Esempio n. 3
0
    def stateParsePorts(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, PortList.OpenBlock):
            parserState.NextState = cls.stateParseDeclarations
            parserState.PushState = PortListGroup.stateParse
            parserState.NextGroup = PortListGroup(parserState.LastGroup,
                                                  currentBlock)
            parserState.BlockMarker = currentBlock
            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 GroupParserException("End of port clause not found.",
                                   currentBlock)
Esempio n. 4
0
    def stateParse(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, PackageBody.NameBlock):
            return
        elif isinstance(currentBlock, PackageBody.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.NextGroup = group(parserState.LastGroup,
                                                  parserState.BlockMarker,
                                                  currentBlock)
                    parserState.BlockMarker = currentBlock
                    parserState.ReIssue = True
                    return

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

        raise GroupParserException(
            "End of package body declaration not found.".format(
                block=currentBlock.__class__.__qualname__), currentBlock)
Esempio n. 5
0
    def stateParseDeclarations(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, Entity.BeginBlock):
            parserState.NextState = cls.stateParseStatements
            return
        elif isinstance(currentBlock, Entity.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 entity declarative region not found.", currentBlock)
Esempio n. 6
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)
Esempio n. 7
0
    def stateParseStatements(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if 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.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 process declaration not found.",
                                   currentBlock)
Esempio n. 8
0
    def stateParseDeclarations(cls, parserState: ParserState):
        currentBlock = parserState.Block

        if isinstance(currentBlock, Architecture.BeginBlock):
            parserState.NextState = cls.stateParseStatements
            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 architecture declaration not found.".format(
                block=currentBlock.__class__.__qualname__), currentBlock)
Esempio n. 9
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)
Esempio n. 10
0
	def stateParse(cls, parserState: ParserState):
		currentBlock = parserState.Block

		# consume OpenBlock
		if isinstance(currentBlock, Procedure.NameBlock):
			parserState.NextGroup =   cls(parserState.LastGroup, currentBlock)
			parserState.BlockMarker = currentBlock
			parserState.NextState =   cls.stateParseGenerics
			return
		else:
			raise BlockParserException("Begin of procedure expected.", currentBlock)
Esempio n. 11
0
    def stateParse(cls, parserState: ParserState):
        currentBlock = parserState.Block

        # consume OpenBlock
        if isinstance(currentBlock, Process.OpenBlock):
            parserState.NextGroup = cls(parserState.LastGroup, currentBlock)
            parserState.BlockMarker = currentBlock
            parserState.NextState = cls.stateParseSensitivityList
            return
        else:
            raise GroupParserException("Begin of process expected.",
                                       currentBlock)
Esempio n. 12
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)
Esempio n. 13
0
    def stateParse2(cls, parserState: ParserState):
        currentBlock = parserState.Block

        # consume OpenBlock
        if isinstance(currentBlock, Function.ReturnTypeBlock):
            parserState.NextState = cls.stateParseDeclarations
            parserState.PushState = cls.stateParse2
            parserState.NextGroup = ReturnTypeGroup(parserState.LastGroup,
                                                    currentBlock)
            parserState.BlockMarker = currentBlock
            return
        else:
            parserState.Pop()
            parserState.ReIssue = True
            return