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)
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)
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)
def stateParse(cls, parserState: ParserState): #document, group): assert isinstance(parserState.CurrentGroup, PackageBodyBlock.NameBlock) cls.stateParsePackageBodyName(parserState) for block in parserState.GroupIterator: if isinstance(block, GenericListBlocks.OpenBlock): parserState.PushState = cls.stateParseGenericList parserState.ReIssue() elif isinstance(block, PortListBlocks.OpenBlock): parserState.PushState = cls.stateParsePortList parserState.ReIssue() elif isinstance(block, ConstantBlock): parserState.PushState = Constant.stateParse parserState.ReIssue() elif isinstance(block, Function.BeginBlock): parserState.PushState = Function.stateParse parserState.ReIssue() elif isinstance(block, PackageBodyBlock.EndBlock): break else: raise BlockParserException( "Block '{0!r}' not supported in a package body.".format( block), block) # FIXME: change to DOMParserException else: raise BlockParserException( "", None) # FIXME: change to DOMParserException parserState.Pop()
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)
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)
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)
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)
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)
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)
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)
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