Made -> have higher precedence than comma
This commit is contained in:
parent
84780270f9
commit
ab24901b9d
1 changed files with 26 additions and 26 deletions
|
|
@ -418,33 +418,11 @@ expr_t::parser_t::parse_querycolon_expr(std::istream& in,
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
expr_t::ptr_op_t
|
|
||||||
expr_t::parser_t::parse_lambda_expr(std::istream& in,
|
|
||||||
const parse_flags_t& tflags) const
|
|
||||||
{
|
|
||||||
ptr_op_t node(parse_querycolon_expr(in, tflags));
|
|
||||||
|
|
||||||
if (node && ! tflags.has_flags(PARSE_SINGLE)) {
|
|
||||||
token_t& tok = next_token(in, tflags.plus_flags(PARSE_OP_CONTEXT));
|
|
||||||
|
|
||||||
if (tok.kind == token_t::ARROW) {
|
|
||||||
ptr_op_t prev(node);
|
|
||||||
node = new op_t(op_t::O_LAMBDA);
|
|
||||||
node->set_left(prev);
|
|
||||||
node->set_right(parse_querycolon_expr(in, tflags));
|
|
||||||
} else {
|
|
||||||
push_token(tok);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
expr_t::ptr_op_t
|
expr_t::ptr_op_t
|
||||||
expr_t::parser_t::parse_comma_expr(std::istream& in,
|
expr_t::parser_t::parse_comma_expr(std::istream& in,
|
||||||
const parse_flags_t& tflags) const
|
const parse_flags_t& tflags) const
|
||||||
{
|
{
|
||||||
ptr_op_t node(parse_lambda_expr(in, tflags));
|
ptr_op_t node(parse_querycolon_expr(in, tflags));
|
||||||
|
|
||||||
if (node && ! tflags.has_flags(PARSE_SINGLE)) {
|
if (node && ! tflags.has_flags(PARSE_SINGLE)) {
|
||||||
ptr_op_t next;
|
ptr_op_t next;
|
||||||
|
|
@ -466,7 +444,7 @@ expr_t::parser_t::parse_comma_expr(std::istream& in,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ptr_op_t chain(new op_t(op_t::O_CONS));
|
ptr_op_t chain(new op_t(op_t::O_CONS));
|
||||||
chain->set_left(parse_lambda_expr(in, tflags));
|
chain->set_left(parse_querycolon_expr(in, tflags));
|
||||||
|
|
||||||
next->set_right(chain);
|
next->set_right(chain);
|
||||||
next = chain;
|
next = chain;
|
||||||
|
|
@ -481,11 +459,33 @@ expr_t::parser_t::parse_comma_expr(std::istream& in,
|
||||||
}
|
}
|
||||||
|
|
||||||
expr_t::ptr_op_t
|
expr_t::ptr_op_t
|
||||||
expr_t::parser_t::parse_assign_expr(std::istream& in,
|
expr_t::parser_t::parse_lambda_expr(std::istream& in,
|
||||||
const parse_flags_t& tflags) const
|
const parse_flags_t& tflags) const
|
||||||
{
|
{
|
||||||
ptr_op_t node(parse_comma_expr(in, tflags));
|
ptr_op_t node(parse_comma_expr(in, tflags));
|
||||||
|
|
||||||
|
if (node && ! tflags.has_flags(PARSE_SINGLE)) {
|
||||||
|
token_t& tok = next_token(in, tflags.plus_flags(PARSE_OP_CONTEXT));
|
||||||
|
|
||||||
|
if (tok.kind == token_t::ARROW) {
|
||||||
|
ptr_op_t prev(node);
|
||||||
|
node = new op_t(op_t::O_LAMBDA);
|
||||||
|
node->set_left(prev);
|
||||||
|
node->set_right(parse_querycolon_expr(in, tflags));
|
||||||
|
} else {
|
||||||
|
push_token(tok);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
expr_t::ptr_op_t
|
||||||
|
expr_t::parser_t::parse_assign_expr(std::istream& in,
|
||||||
|
const parse_flags_t& tflags) const
|
||||||
|
{
|
||||||
|
ptr_op_t node(parse_lambda_expr(in, tflags));
|
||||||
|
|
||||||
if (node && ! tflags.has_flags(PARSE_SINGLE)) {
|
if (node && ! tflags.has_flags(PARSE_SINGLE)) {
|
||||||
token_t& tok = next_token(in, tflags.plus_flags(PARSE_OP_CONTEXT));
|
token_t& tok = next_token(in, tflags.plus_flags(PARSE_OP_CONTEXT));
|
||||||
|
|
||||||
|
|
@ -493,7 +493,7 @@ expr_t::parser_t::parse_assign_expr(std::istream& in,
|
||||||
ptr_op_t prev(node);
|
ptr_op_t prev(node);
|
||||||
node = new op_t(op_t::O_DEFINE);
|
node = new op_t(op_t::O_DEFINE);
|
||||||
node->set_left(prev);
|
node->set_left(prev);
|
||||||
node->set_right(parse_comma_expr(in, tflags));
|
node->set_right(parse_lambda_expr(in, tflags));
|
||||||
} else {
|
} else {
|
||||||
push_token(tok);
|
push_token(tok);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue