mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 04:24:43 +00:00
Added tuples parser with parentheses
note: tuples without parentheses are not implemented
This commit is contained in:
parent
10a7c49b07
commit
c80cf11fa6
1 changed files with 28 additions and 12 deletions
|
@ -1755,18 +1755,9 @@ impl Parser {
|
|||
Ok(Expr::Lambda(lambda))
|
||||
}
|
||||
Some(t) if t.is(LParen) => {
|
||||
self.skip();
|
||||
let expr = self.try_reduce_expr().map_err(|_| self.stack_dec())?;
|
||||
if self.cur_is(RParen) {
|
||||
self.skip();
|
||||
self.level -= 1;
|
||||
Ok(expr)
|
||||
} else {
|
||||
self.level -= 1;
|
||||
let err = self.skip_and_throw_syntax_err(caused_by!());
|
||||
self.errs.push(err);
|
||||
return Err(());
|
||||
}
|
||||
let tuple = self.try_reduce_tuple().map_err(|_| self.stack_dec())?;
|
||||
self.level -= 1;
|
||||
Ok(Expr::Tuple(tuple))
|
||||
}
|
||||
Some(t) if t.is(LSqBr) => {
|
||||
let array = self.try_reduce_array().map_err(|_| self.stack_dec())?;
|
||||
|
@ -1860,6 +1851,31 @@ impl Parser {
|
|||
Ok(arr)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn try_reduce_tuple(&mut self) -> ParseResult<Tuple> {
|
||||
debug_call_info!(self);
|
||||
let l_paren = self.lpop();
|
||||
let inner = self.try_reduce_elems().map_err(|_| self.stack_dec())?;
|
||||
let r_paren = self.lpop();
|
||||
if !r_paren.is(RParen) {
|
||||
self.level -= 1;
|
||||
self.errs
|
||||
.push(ParseError::simple_syntax_error(0, r_paren.loc()));
|
||||
return Err(());
|
||||
}
|
||||
let tpl = match inner {
|
||||
ArrayInner::Normal(elems) => Tuple::Normal(NormalTuple::new(l_paren, r_paren, elems)),
|
||||
ArrayInner::Comprehension {
|
||||
elem: _,
|
||||
generators: _,
|
||||
guards: _,
|
||||
} => todo!(),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
self.level -= 1;
|
||||
Ok(tpl)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn try_reduce_name(&mut self) -> ParseResult<VarName> {
|
||||
debug_call_info!(self);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue