[Python-checkins] CVS: python/dist/src/Parser grammar.c,2.17,2.18 tokenizer.c,2.47,2.48
Thomas Wouters
python-dev@python.org
Thu, 24 Aug 2000 13:11:37 -0700
- Previous message: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.40,1.41
- Next message: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.194,2.195 compile.c,2.133,2.134 graminit.c,2.27,2.28 import.c,2.147,2.148
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/dist/src/Parser
In directory slayer.i.sourceforge.net:/tmp/cvs-serv13530/Parser
Modified Files:
grammar.c tokenizer.c
Log Message:
Support for three-token characters (**=, >>=, <<=) which was written by
Michael Hudson, and support in general for the augmented assignment syntax.
The graminit.c patch is large!
Index: grammar.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Parser/grammar.c,v
retrieving revision 2.17
retrieving revision 2.18
diff -C2 -r2.17 -r2.18
*** grammar.c 2000/07/22 19:20:54 2.17
--- grammar.c 2000/08/24 20:11:31 2.18
***************
*** 212,215 ****
--- 212,227 ----
lb->lb_str);
}
+ else if (lb->lb_str[2] && lb->lb_str[3] && lb->lb_str[4] == lb->lb_str[0]) {
+ int type = (int) PyToken_ThreeChars(lb->lb_str[1],
+ lb->lb_str[2],
+ lb->lb_str[3]);
+ if (type != OP) {
+ lb->lb_type = type;
+ lb->lb_str = NULL;
+ }
+ else
+ printf("Unknown OP label %s\n",
+ lb->lb_str);
+ }
else
printf("Can't translate STRING label %s\n",
Index: tokenizer.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Parser/tokenizer.c,v
retrieving revision 2.47
retrieving revision 2.48
diff -C2 -r2.47 -r2.48
*** tokenizer.c 2000/07/22 19:20:54 2.47
--- tokenizer.c 2000/08/24 20:11:31 2.48
***************
*** 79,82 ****
--- 79,93 ----
"RIGHTSHIFT",
"DOUBLESTAR",
+ "PLUSEQUAL",
+ "MINEQUAL",
+ "STAREQUAL",
+ "SLASHEQUAL",
+ "PERCENTEQUAL",
+ "AMPEREQUAL",
+ "VBAREQUAL",
+ "CIRCUMFLEXEQUAL",
+ "LEFTSHIFTEQUAL",
+ "RIGHTSHIFTEQUAL",
+ "DOUBLESTAREQUAL",
/* This table must match the #defines in token.h! */
"OP",
***************
*** 389,401 ****
--- 400,488 ----
}
break;
+ case '+':
+ switch (c2) {
+ case '=': return PLUSEQUAL;
+ }
+ break;
+ case '-':
+ switch (c2) {
+ case '=': return MINEQUAL;
+ }
+ break;
case '*':
switch (c2) {
case '*': return DOUBLESTAR;
+ case '=': return STAREQUAL;
}
break;
+ case '/':
+ switch (c2) {
+ case '=': return SLASHEQUAL;
+ }
+ break;
+ case '|':
+ switch (c2) {
+ case '=': return VBAREQUAL;
+ }
+ break;
+ case '%':
+ switch (c2) {
+ case '=': return PERCENTEQUAL;
+ }
+ break;
+ case '&':
+ switch (c2) {
+ case '=': return AMPEREQUAL;
+ }
+ break;
+ case '^':
+ switch (c2) {
+ case '=': return CIRCUMFLEXEQUAL;
+ }
+ break;
}
return OP;
}
+ int
+ PyToken_ThreeChars(int c1, int c2, int c3)
+ {
+ switch (c1) {
+ case '<':
+ switch (c2) {
+ case '<':
+ switch (c3) {
+ case '=':
+ return LEFTSHIFTEQUAL;
+ break;
+ }
+ break;
+ }
+ break;
+ case '>':
+ switch (c2) {
+ case '>':
+ switch (c3) {
+ case '=':
+ return RIGHTSHIFTEQUAL;
+ break;
+ }
+ break;
+ }
+ break;
+ case '*':
+ switch (c2) {
+ case '*':
+ switch (c3) {
+ case '=':
+ return DOUBLESTAREQUAL;
+ break;
+ }
+ break;
+ }
+ break;
+ }
+ return OP;
+ }
static int
***************
*** 771,774 ****
--- 858,868 ----
int token = PyToken_TwoChars(c, c2);
if (token != OP) {
+ int c3 = tok_nextc(tok);
+ int token3 = PyToken_ThreeChars(c, c2, c3);
+ if (token3 != OP) {
+ token = token3;
+ } else {
+ tok_backup(tok, c3);
+ }
*p_start = tok->start;
*p_end = tok->cur;
- Previous message: [Python-checkins] CVS: python/dist/src/Grammar Grammar,1.40,1.41
- Next message: [Python-checkins] CVS: python/dist/src/Python ceval.c,2.194,2.195 compile.c,2.133,2.134 graminit.c,2.27,2.28 import.c,2.147,2.148
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]