コード例 #1
0
    def main(argv=None):
        print 'Coco/R v%s for Python (May 16, 2007) - Translated by %s (%s)\n' % (
            MetaData['version'], MetaData['author'], MetaData['author_email'])

        if argv is None:
            if len(sys.argv) == 1:
                argv = [sys.argv[0], '-h']
            else:
                argv = sys.argv
        options, args = Tab.parseArgs(argv)

        ATGName = args[1]
        dirName, fileName = os.path.split(ATGName)

        # Setup the default frame directory
        try:
            if options.frameFileDir:
                framesDir = options.frameFileDir
            else:
                framesDir = os.path.join(ROOT_DIR, 'frames')

            CodeGenerator.frameDir = framesDir
            Tab.frameDir = framesDir
        except:
            pass

        # Initialize the Scanner
        try:
            s = open(fileName, 'r')
            try:
                strVal = s.read()
            except IOError:
                sys.stdout.write(
                    '-- Compiler Error: Failed to read from source file "%s"\n'
                    % fileName)

            try:
                s.close()
            except IOError:
                raise RuntimeError(
                    '-- Compiler Error: cannot close source file "%s"' %
                    fileName)
        except IOError:
            raise RuntimeError('-- Compiler Error: Cannot open file "%s"' %
                               fileName)

        scanner = Scanner(strVal)
        parser = Parser()

        Errors.Init(fileName, dirName, Tab.ddt[5], parser.getParsingPos,
                    parser.errorMessages)
        Trace.Init(dirName)
        Tab.Init()
        DFA.Init(fileName, dirName)

        CodeGenerator.sourceDir = dirName
        CodeGenerator.frameDir = Tab.frameDir
        ParserGen.Init(fileName, dirName)
        DriverGen.Init(fileName, dirName)
        parser.Parse(scanner)
        Errors.Summarize(scanner.buffer)
        Trace.Close()
        if Errors.count != 0:
            sys.exit(1)