"from ... import x" should not be a syntax error... make

import_stmt accept ELLIPSes and DOTs.
This commit is contained in:
Georg Brandl 2007-03-19 18:56:50 +00:00
parent d16e81aabe
commit e66c8c7c12
2 changed files with 8 additions and 3 deletions

View File

@ -55,7 +55,8 @@ yield_stmt: yield_expr
raise_stmt: 'raise' [test [',' test [',' test]]] raise_stmt: 'raise' [test [',' test [',' test]]]
import_stmt: import_name | import_from import_stmt: import_name | import_from
import_name: 'import' dotted_as_names import_name: 'import' dotted_as_names
import_from: ('from' ('.'* dotted_name | '.'+) # note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS
import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+)
'import' ('*' | '(' import_as_names ')' | import_as_names)) 'import' ('*' | '(' import_as_names ')' | import_as_names))
import_as_name: NAME ['as' NAME] import_as_name: NAME ['as' NAME]
dotted_as_name: dotted_name ['as' NAME] dotted_as_name: dotted_name ['as' NAME]

View File

@ -2406,8 +2406,8 @@ ast_for_import_stmt(struct compiling *c, const node *n)
/* /*
import_stmt: import_name | import_from import_stmt: import_name | import_from
import_name: 'import' dotted_as_names import_name: 'import' dotted_as_names
import_from: 'from' ('.'* dotted_name | '.') 'import' import_from: 'from' (('.' | '...')* dotted_name | ('.' | '...')+)
('*' | '(' import_as_names ')' | import_as_names) 'import' ('*' | '(' import_as_names ')' | import_as_names)
*/ */
int lineno; int lineno;
int col_offset; int col_offset;
@ -2445,6 +2445,10 @@ ast_for_import_stmt(struct compiling *c, const node *n)
mod = alias_for_import_name(c, CHILD(n, idx)); mod = alias_for_import_name(c, CHILD(n, idx));
idx++; idx++;
break; break;
} else if (TYPE(CHILD(n, idx)) == ELLIPSIS) {
/* three consecutive dots are tokenized as one ELLIPSIS */
ndots += 3;
continue;
} else if (TYPE(CHILD(n, idx)) != DOT) { } else if (TYPE(CHILD(n, idx)) != DOT) {
break; break;
} }