~ubuntu-branches/ubuntu/trusty/python3.4/trusty-proposed

« back to all changes in this revision

Viewing changes to Parser/grammar1.c

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-11-25 09:44:27 UTC
  • Revision ID: package-import@ubuntu.com-20131125094427-lzxj8ap5w01lmo7f
Tags: upstream-3.4~b1
ImportĀ upstreamĀ versionĀ 3.4~b1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/* Grammar subroutines needed by parser */
 
3
 
 
4
#include "Python.h"
 
5
#include "pgenheaders.h"
 
6
#include "grammar.h"
 
7
#include "token.h"
 
8
 
 
9
/* Return the DFA for the given type */
 
10
 
 
11
dfa *
 
12
PyGrammar_FindDFA(grammar *g, int type)
 
13
{
 
14
    dfa *d;
 
15
#if 1
 
16
    /* Massive speed-up */
 
17
    d = &g->g_dfa[type - NT_OFFSET];
 
18
    assert(d->d_type == type);
 
19
    return d;
 
20
#else
 
21
    /* Old, slow version */
 
22
    int i;
 
23
 
 
24
    for (i = g->g_ndfas, d = g->g_dfa; --i >= 0; d++) {
 
25
        if (d->d_type == type)
 
26
            return d;
 
27
    }
 
28
    assert(0);
 
29
    /* NOTREACHED */
 
30
#endif
 
31
}
 
32
 
 
33
const char *
 
34
PyGrammar_LabelRepr(label *lb)
 
35
{
 
36
    static char buf[100];
 
37
 
 
38
    if (lb->lb_type == ENDMARKER)
 
39
        return "EMPTY";
 
40
    else if (ISNONTERMINAL(lb->lb_type)) {
 
41
        if (lb->lb_str == NULL) {
 
42
            PyOS_snprintf(buf, sizeof(buf), "NT%d", lb->lb_type);
 
43
            return buf;
 
44
        }
 
45
        else
 
46
            return lb->lb_str;
 
47
    }
 
48
    else if (lb->lb_type < N_TOKENS) {
 
49
        if (lb->lb_str == NULL)
 
50
            return _PyParser_TokenNames[lb->lb_type];
 
51
        else {
 
52
            PyOS_snprintf(buf, sizeof(buf), "%.32s(%.32s)",
 
53
                _PyParser_TokenNames[lb->lb_type], lb->lb_str);
 
54
            return buf;
 
55
        }
 
56
    }
 
57
    else {
 
58
        Py_FatalError("invalid label");
 
59
        return NULL;
 
60
    }
 
61
}