~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Parser/grammar1.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

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, register int type)
 
13
{
 
14
        register 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
        register 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
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 {
 
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
}