Last change
on this file was 2, checked in by Yuri Dario, 15 years ago |
Initial import for vendor code.
|
-
Property svn:eol-style
set to
native
|
File size:
1.0 KB
|
Line | |
---|
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 | }
|
---|
Note:
See
TracBrowser
for help on using the repository browser.