def stateItemDelimiter(cls, parserState: ParserState): token = parserState.Token if isinstance(token, StringToken): if (token <= "signal"): parserState.NewToken = SignalKeyword(token) parserState.PushState = PortListInterfaceSignalBlock.stateSignalKeyword parserState.TokenMarker = parserState.NewToken return else: parserState.NewToken = IdentifierToken(token) parserState.PushState = PortListInterfaceSignalBlock.stateObjectName parserState.TokenMarker = parserState.NewToken return elif isinstance(token, ExtendedIdentifier): parserState.NextState = PortListInterfaceSignalBlock.stateObjectName return elif isinstance(token, SpaceToken): parserState.NextState = OpenBlock.stateOpeningParenthesis return elif isinstance(token, LinebreakToken): parserState.NewBlock = LinebreakBlock(parserState.LastBlock, token) parserState.TokenMarker = token parserState.NextState = OpenBlock.stateOpeningParenthesis return elif isinstance(token, CommentToken): parserState.NewBlock = cls(parserState.LastBlock, parserState.TokenMarker, endToken=token.PreviousToken, multiPart=True) _ = CommentBlock(parserState.NewBlock, token) parserState.TokenMarker = None # parserState.NextState = cls.stateWhitespace1 return raise TokenParserException("Expected port name (identifier).", token)
def stateOpeningParenthesis(cls, parserState: ParserState): token = parserState.Token if isinstance(token, StringToken): if (token <= "constant"): parserState.NewToken = ConstantKeyword(token) parserState.NextState = DelimiterBlock.stateItemDelimiter parserState.PushState = ParameterListInterfaceConstantBlock.stateConstantKeyword parserState.TokenMarker = parserState.NewToken return elif (token <= "variable"): parserState.NewToken = VariableKeyword(token) parserState.NextState = DelimiterBlock.stateItemDelimiter parserState.PushState = ParameterListInterfaceVariableBlock.stateVariableKeyword parserState.TokenMarker = parserState.NewToken return elif (token <= "signal"): parserState.NewToken = SignalKeyword(token) parserState.NextState = DelimiterBlock.stateItemDelimiter parserState.PushState = ParameterListInterfaceSignalBlock.stateSignalKeyword parserState.TokenMarker = parserState.NewToken return else: parserState.NewToken = IdentifierToken(token) parserState.PushState = ParameterListInterfaceConstantBlock.stateObjectName parserState.TokenMarker = parserState.NewToken return elif isinstance(token, ExtendedIdentifier): parserState.NextState = ParameterListInterfaceConstantBlock.stateObjectName return elif isinstance(token, SpaceToken): blockType = IndentationBlock if isinstance( token, IndentationToken) else WhitespaceBlock parserState.NewBlock = blockType(parserState.LastBlock, token) return elif isinstance(token, LinebreakToken): parserState.NewBlock = LinebreakBlock(parserState.LastBlock, token) parserState.TokenMarker = token return elif isinstance(token, CommentToken): parserState.NewBlock = cls(parserState.LastBlock, parserState.TokenMarker, endToken=token.PreviousToken, multiPart=True) _ = CommentBlock(parserState.NewBlock, token) parserState.TokenMarker = None return raise TokenParserException( "Expected interface element name (identifier).", token)
def stateOpeningParenthesis(cls, parserState: ParserState): token = parserState.Token if (isinstance(token, CharacterToken) and (token == ")")): # if (parserState.TokenMarker != token): # parserState.NewBlock = IndentationBlock(parserState.LastBlock, parserState.TokenMarker, token.PreviousToken) parserState.Pop() parserState.TokenMarker = token return elif isinstance(token, StringToken): if (token <= "signal"): parserState.NewToken = SignalKeyword(token) parserState.NextState = DelimiterBlock.stateItemDelimiter parserState.PushState = PortListInterfaceSignalBlock.stateSignalKeyword parserState.TokenMarker = parserState.NewToken return else: parserState.NewToken = IdentifierToken(token) parserState.NextState = DelimiterBlock.stateItemDelimiter parserState.PushState = PortListInterfaceSignalBlock.stateObjectName parserState.TokenMarker = parserState.NewToken return elif isinstance(token, ExtendedIdentifier): parserState.NextState = PortListInterfaceSignalBlock.stateObjectName return elif isinstance(token, SpaceToken): blockType = IndentationBlock if isinstance( token, IndentationToken) else WhitespaceBlock parserState.NewBlock = blockType(parserState.LastBlock, token) return elif isinstance(token, LinebreakToken): parserState.NewBlock = LinebreakBlock(parserState.LastBlock, token) parserState.TokenMarker = token # parserState.NextState = cls.stateWhitespace1 return elif isinstance(token, CommentToken): parserState.NewBlock = cls(parserState.LastBlock, parserState.TokenMarker, endToken=token.PreviousToken, multiPart=True) _ = CommentBlock(parserState.NewBlock, token) parserState.TokenMarker = None # parserState.NextState = cls.stateWhitespace1 return raise TokenParserException( "Expected interface signal name (identifier) or keyword: SIGNAL.", token)
def stateItemDelimiter(cls, parserState: ParserState): token = parserState.Token if isinstance(token, StringToken): tokenValue = token.Value.lower() if (tokenValue == "constant"): parserState.NewToken = ConstantKeyword(token) parserState.PushState = ParameterListInterfaceConstantBlock.stateConstantKeyword parserState.TokenMarker = parserState.NewToken return elif (tokenValue == "variable"): parserState.NewToken = VariableKeyword(token) parserState.PushState = ParameterListInterfaceVariableBlock.stateVariableKeyword parserState.TokenMarker = parserState.NewToken return elif (tokenValue == "signal"): parserState.NewToken = SignalKeyword(token) parserState.PushState = ParameterListInterfaceSignalBlock.stateSignalKeyword parserState.TokenMarker = parserState.NewToken return elif (tokenValue == "type"): parserState.NewToken = TypeKeyword(token) parserState.PushState = ParameterListInterfaceTypeBlock.stateTypeKeyword parserState.TokenMarker = parserState.NewToken return elif (tokenValue == "procedure"): raise NotImplementedError( "Generic procedures are not supported.") elif (tokenValue == "function"): raise NotImplementedError( "Generic functions are not supported.") elif (tokenValue == "impure"): raise NotImplementedError( "Generic impure functions are not supported.") elif (tokenValue == "pure"): raise NotImplementedError( "Generic pure functions are not supported.") else: parserState.NewToken = IdentifierToken(token) parserState.PushState = ParameterListInterfaceConstantBlock.stateObjectName parserState.TokenMarker = parserState.NewToken return elif isinstance(token, ExtendedIdentifier): parserState.NextState = ParameterListInterfaceConstantBlock.stateObjectName return elif isinstance(token, SpaceToken): parserState.TokenMarker = token parserState.NextState = ItemBlock.stateItemRemainder return elif isinstance(token, LinebreakToken): parserState.NewBlock = LinebreakBlock(parserState.LastBlock, token) parserState.TokenMarker = token parserState.NextState = ItemBlock.stateItemRemainder return elif isinstance(token, CommentToken): parserState.NewBlock = cls(parserState.LastBlock, parserState.TokenMarker, endToken=token.PreviousToken, multiPart=True) _ = CommentBlock(parserState.NewBlock, token) parserState.TokenMarker = None return raise TokenParserException("Expected parameter name (identifier).", token)