public Statement import_from()
{
var posStart = Expect(TokenType.From).Start;
DottedName name = null;
if (Peek(TokenType.DOT, TokenType.ELLIPSIS))
{
lexer.Get();
while (Peek(TokenType.DOT, TokenType.ELLIPSIS))
{
lexer.Get();
}
if (Peek(TokenType.ID))
name = dotted_name();
}
else
{
name = dotted_name();
}
Expect(TokenType.Import);
int posEnd;
List<AliasedName> aliasNames = null;
Token token;
if (PeekAndDiscard(TokenType.OP_STAR, out token))
{
aliasNames = new List<AliasedName>();
posEnd = token.End;
}
else if (PeekAndDiscard(TokenType.LPAREN))
{
aliasNames = import_as_names();
posEnd = Expect(TokenType.RPAREN).End;
}
else
{
aliasNames = import_as_names();
posEnd = aliasNames.Last().End;
}
return new FromStatement(name, aliasNames, filename, posStart, posEnd);
}