# coding: iso-8859-1
#
# script(ed/able/ing/ful) code compiler
# (c)2006 Tiago Rezende
# Distributed freely.
#
# Utility and base classes
#

import os

def isCIdentifierFormat(token):
    # evaluates a given string to find if it contains
    # a (formally) valid C identifier
    if isnum(token[0]):
        return False
    elif isalpha(token[0]) or token[0]=='_':
        for c in token[1:]:
            if c=='_':
                pass
            elif not isalnum(c):
                return False
    return True

class BaseModule:
    # base class for the scc modules, providing verbosity and
    # error-message handling
    def __init__(self, modulename):
        self.verboselevel = 0
        self.warninglevel = 0
        self.modulename = modulename
        self.messages = []
        self.warnings = []
        self.errors = []
    def setVerbosity(self, verbosity):
        # sets the verbosity level
        self.verboselevel = verbosity
    def setWarningLevel(self, level):
        # sets the warning level
        self.warninglevel = level
    def addMessage(self, message, level):
        # prints and adds a message if it's level is less than
        # the current verbosity level
        if(self.verboselevel>level):
            print message
            self.messages.append(message)
    def addWarning(self, message, warningnum, level):
        # prints and adds a warning if it's level is less than
        # the current warning level
        if(self.warninglevel>level):
            print "" + self.modulename + " warning<" + warningnum + ">:" + message
            self.warnings.append([message, warningnum])
    def addError(self, message, errornum):
        # prints and adds an error message
        print "" + self.modulename + "error<" + errornum + ">: " + message
        self.errors.append([message, errornum])


