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)
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)
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, 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)
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)