py: Clean up some bits and pieces in parser, grammar.
This commit is contained in:
parent
fa90ab1407
commit
4735c45c51
@ -55,7 +55,6 @@ DEF_RULE(eval_input_2, nc, and(1), tok(NEWLINE))
|
|||||||
// vfpdef: NAME
|
// vfpdef: NAME
|
||||||
|
|
||||||
DEF_RULE(decorator, nc, and(4), tok(DEL_AT), rule(dotted_name), opt_rule(trailer_paren), tok(NEWLINE))
|
DEF_RULE(decorator, nc, and(4), tok(DEL_AT), rule(dotted_name), opt_rule(trailer_paren), tok(NEWLINE))
|
||||||
//DEF_RULE(decorator_2, nc, and(3), tok(DEL_PAREN_OPEN), opt_rule(arglist), tok(DEL_PAREN_CLOSE))
|
|
||||||
DEF_RULE(decorators, nc, one_or_more, rule(decorator))
|
DEF_RULE(decorators, nc, one_or_more, rule(decorator))
|
||||||
DEF_RULE(decorated, c(decorated), and(2), rule(decorators), rule(decorated_body))
|
DEF_RULE(decorated, c(decorated), and(2), rule(decorators), rule(decorated_body))
|
||||||
DEF_RULE(decorated_body, nc, or(2), rule(classdef), rule(funcdef))
|
DEF_RULE(decorated_body, nc, or(2), rule(classdef), rule(funcdef))
|
||||||
|
12
py/parse.c
12
py/parse.c
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013, 2014 Damien P. George
|
* Copyright (c) 2013-2015 Damien P. George
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -48,8 +48,7 @@
|
|||||||
#define RULE_ARG_ARG_MASK (0x0fff)
|
#define RULE_ARG_ARG_MASK (0x0fff)
|
||||||
#define RULE_ARG_TOK (0x1000)
|
#define RULE_ARG_TOK (0x1000)
|
||||||
#define RULE_ARG_RULE (0x2000)
|
#define RULE_ARG_RULE (0x2000)
|
||||||
#define RULE_ARG_OPT_TOK (0x3000)
|
#define RULE_ARG_OPT_RULE (0x3000)
|
||||||
#define RULE_ARG_OPT_RULE (0x4000)
|
|
||||||
|
|
||||||
#define ADD_BLANK_NODE(rule) ((rule->act & RULE_ACT_ADD_BLANK) != 0)
|
#define ADD_BLANK_NODE(rule) ((rule->act & RULE_ACT_ADD_BLANK) != 0)
|
||||||
|
|
||||||
@ -84,7 +83,6 @@ enum {
|
|||||||
#define list_with_end (RULE_ACT_LIST | 3)
|
#define list_with_end (RULE_ACT_LIST | 3)
|
||||||
#define tok(t) (RULE_ARG_TOK | MP_TOKEN_##t)
|
#define tok(t) (RULE_ARG_TOK | MP_TOKEN_##t)
|
||||||
#define rule(r) (RULE_ARG_RULE | RULE_##r)
|
#define rule(r) (RULE_ARG_RULE | RULE_##r)
|
||||||
#define opt_tok(t) (RULE_ARG_OPT_TOK | MP_TOKEN_##t)
|
|
||||||
#define opt_rule(r) (RULE_ARG_OPT_RULE | RULE_##r)
|
#define opt_rule(r) (RULE_ARG_OPT_RULE | RULE_##r)
|
||||||
#ifdef USE_RULE_NAME
|
#ifdef USE_RULE_NAME
|
||||||
#define DEF_RULE(rule, comp, kind, ...) static const rule_t rule_##rule = { RULE_##rule, kind, #rule, { __VA_ARGS__ } };
|
#define DEF_RULE(rule, comp, kind, ...) static const rule_t rule_##rule = { RULE_##rule, kind, #rule, { __VA_ARGS__ } };
|
||||||
@ -98,7 +96,6 @@ enum {
|
|||||||
#undef list_with_end
|
#undef list_with_end
|
||||||
#undef tok
|
#undef tok
|
||||||
#undef rule
|
#undef rule
|
||||||
#undef opt_tok
|
|
||||||
#undef opt_rule
|
#undef opt_rule
|
||||||
#undef one_or_more
|
#undef one_or_more
|
||||||
#undef DEF_RULE
|
#undef DEF_RULE
|
||||||
@ -603,13 +600,10 @@ mp_parse_node_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) {
|
|||||||
num_not_nil += 1;
|
num_not_nil += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//printf("done and %s n=%d i=%d notnil=%d\n", rule->rule_name, n, i, num_not_nil);
|
|
||||||
if (emit_rule) {
|
if (emit_rule) {
|
||||||
push_result_rule(&parser, rule_src_line, rule, i);
|
push_result_rule(&parser, rule_src_line, rule, i);
|
||||||
} else if (num_not_nil == 0) {
|
} else if (num_not_nil == 0) {
|
||||||
push_result_rule(&parser, rule_src_line, rule, i); // needed for, eg, atom_paren, testlist_comp_3b
|
push_result_rule(&parser, rule_src_line, rule, i); // needed for, eg, atom_paren, testlist_comp_3b
|
||||||
//result_stack_show(parser);
|
|
||||||
//assert(0);
|
|
||||||
} else if (num_not_nil == 1) {
|
} else if (num_not_nil == 1) {
|
||||||
// single result, leave it on stack
|
// single result, leave it on stack
|
||||||
mp_parse_node_t pn = MP_PARSE_NODE_NULL;
|
mp_parse_node_t pn = MP_PARSE_NODE_NULL;
|
||||||
@ -711,7 +705,6 @@ mp_parse_node_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) {
|
|||||||
// just leave single item on stack (ie don't wrap in a list)
|
// just leave single item on stack (ie don't wrap in a list)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//printf("done list %s %d %d\n", rule->rule_name, n, i);
|
|
||||||
push_result_rule(&parser, rule_src_line, rule, i);
|
push_result_rule(&parser, rule_src_line, rule, i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -739,7 +732,6 @@ memory_error:
|
|||||||
goto syntax_error;
|
goto syntax_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
//printf("--------------\n");
|
|
||||||
//result_stack_show(parser);
|
//result_stack_show(parser);
|
||||||
//printf("rule stack alloc: %d\n", parser.rule_stack_alloc);
|
//printf("rule stack alloc: %d\n", parser.rule_stack_alloc);
|
||||||
//printf("result stack alloc: %d\n", parser.result_stack_alloc);
|
//printf("result stack alloc: %d\n", parser.result_stack_alloc);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user