Back to index

python3.2  3.2.2
Defines | Functions | Variables
pgenmain.c File Reference
#include "Python.h"
#include "pgenheaders.h"
#include "grammar.h"
#include "node.h"
#include "parsetok.h"
#include "pgen.h"
#include <stdarg.h>

Go to the source code of this file.

Defines

#define PGEN

Functions

grammargetgrammar (char *filename)
void Py_Exit (int sts)
int main (int argc, char **argv)
PyObjectPyErr_Occurred ()
void Py_FatalError (const char *msg)
char * PyOS_Readline (FILE *sys_stdin, FILE *sys_stdout, char *prompt)
char * Py_UniversalNewlineFgets (char *buf, int n, FILE *stream, PyObject *fobj)
void PySys_WriteStderr (const char *format,...)

Variables

int Py_DebugFlag
int Py_VerboseFlag
int Py_IgnoreEnvironmentFlag

Define Documentation

#define PGEN

Definition at line 16 of file pgenmain.c.


Function Documentation

grammar * getgrammar ( char *  filename)

Definition at line 77 of file pgenmain.c.

{
    FILE *fp;
    node *n;
    grammar *g0, *g;
    perrdetail err;

    fp = fopen(filename, "r");
    if (fp == NULL) {
        perror(filename);
        Py_Exit(1);
    }
    g0 = meta_grammar();
    n = PyParser_ParseFile(fp, filename, g0, g0->g_start,
                  (char *)NULL, (char *)NULL, &err);
    fclose(fp);
    if (n == NULL) {
        fprintf(stderr, "Parsing error %d, line %d.\n",
            err.error, err.lineno);
        if (err.text != NULL) {
            size_t i;
            fprintf(stderr, "%s", err.text);
            i = strlen(err.text);
            if (i == 0 || err.text[i-1] != '\n')
                fprintf(stderr, "\n");
            for (i = 0; i < err.offset; i++) {
                if (err.text[i] == '\t')
                    putc('\t', stderr);
                else
                    putc(' ', stderr);
            }
            fprintf(stderr, "^\n");
            PyObject_FREE(err.text);
        }
        Py_Exit(1);
    }
    g = pgen(n);
    if (g == NULL) {
        printf("Bad grammar.\n");
        Py_Exit(1);
    }
    return g;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int main ( int argc  ,
char **  argv 
)

Definition at line 39 of file pgenmain.c.

{
    grammar *g;
    FILE *fp;
    char *filename, *graminit_h, *graminit_c;

    if (argc != 4) {
        fprintf(stderr,
            "usage: %s grammar graminit.h graminit.c\n", argv[0]);
        Py_Exit(2);
    }
    filename = argv[1];
    graminit_h = argv[2];
    graminit_c = argv[3];
    g = getgrammar(filename);
    fp = fopen(graminit_c, "w");
    if (fp == NULL) {
        perror(graminit_c);
        Py_Exit(1);
    }
    if (Py_DebugFlag)
        printf("Writing %s ...\n", graminit_c);
    printgrammar(g, fp);
    fclose(fp);
    fp = fopen(graminit_h, "w");
    if (fp == NULL) {
        perror(graminit_h);
        Py_Exit(1);
    }
    if (Py_DebugFlag)
        printf("Writing %s ...\n", graminit_h);
    printnonterminals(g, fp);
    fclose(fp);
    Py_Exit(0);
    return 0; /* Make gcc -Wall happy */
}

Here is the call graph for this function:

void Py_Exit ( int  sts)

Definition at line 33 of file pgenmain.c.

{
    exit(sts);
}

Here is the caller graph for this function:

void Py_FatalError ( const char *  msg)

Definition at line 129 of file pgenmain.c.

{
    fprintf(stderr, "pgen: FATAL ERROR: %s\n", msg);
    Py_Exit(1);
}

Here is the call graph for this function:

char* Py_UniversalNewlineFgets ( char *  buf,
int  n,
FILE *  stream,
PyObject fobj 
)

Definition at line 159 of file pgenmain.c.

{
    return fgets(buf, n, stream);
}

Definition at line 123 of file pgenmain.c.

{
    return 0;
}
char* PyOS_Readline ( FILE *  sys_stdin,
FILE *  sys_stdout,
char *  prompt 
)

Definition at line 138 of file pgenmain.c.

{
    size_t n = 1000;
    char *p = (char *)PyMem_MALLOC(n);
    char *q;
    if (p == NULL)
        return NULL;
    fprintf(stderr, "%s", prompt);
    q = fgets(p, n, sys_stdin);
    if (q == NULL) {
        *p = '\0';
        return p;
    }
    n = strlen(p);
    if (n > 0 && p[n-1] != '\n')
        p[n-1] = '\n';
    return (char *)PyMem_REALLOC(p, n+1);
}

Here is the call graph for this function:

void PySys_WriteStderr ( const char *  format,
  ... 
)

Definition at line 168 of file pgenmain.c.

{
    va_list va;

    va_start(va, format);
    vfprintf(stderr, format, va);
    va_end(va);
}

Here is the caller graph for this function:


Variable Documentation

Definition at line 25 of file pgenmain.c.

Definition at line 27 of file pgenmain.c.

Definition at line 26 of file pgenmain.c.