awk: rename TC_SEQSTART/END to L/RPAREN, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
a493441ca5
commit
9782cb7774
@ -207,48 +207,48 @@ typedef struct tsplitter_s {
|
||||
} tsplitter;
|
||||
|
||||
/* simple token classes */
|
||||
/* Order and hex values are very important!!! See next_token() */
|
||||
#define TC_SEQSTART (1 << 0) /* ( */
|
||||
#define TC_SEQTERM (1 << 1) /* ) */
|
||||
/* order and hex values are very important!!! See next_token() */
|
||||
#define TC_LPAREN (1 << 0) /* ( */
|
||||
#define TC_RPAREN (1 << 1) /* ) */
|
||||
#define TC_REGEXP (1 << 2) /* /.../ */
|
||||
#define TC_OUTRDR (1 << 3) /* | > >> */
|
||||
#define TC_UOPPOST (1 << 4) /* unary postfix operator ++ -- */
|
||||
#define TC_UOPPRE1 (1 << 5) /* unary prefix operator ++ -- $ */
|
||||
#define TC_BINOPX (1 << 6) /* two-opnd operator */
|
||||
#define TC_IN (1 << 7)
|
||||
#define TC_COMMA (1 << 8)
|
||||
#define TC_PIPE (1 << 9) /* input redirection pipe */
|
||||
#define TC_IN (1 << 7) /* 'in' */
|
||||
#define TC_COMMA (1 << 8) /* , */
|
||||
#define TC_PIPE (1 << 9) /* input redirection pipe | */
|
||||
#define TC_UOPPRE2 (1 << 10) /* unary prefix operator + - ! */
|
||||
#define TC_ARRTERM (1 << 11) /* ] */
|
||||
#define TC_GRPSTART (1 << 12) /* { */
|
||||
#define TC_GRPTERM (1 << 13) /* } */
|
||||
#define TC_SEMICOL (1 << 14)
|
||||
#define TC_SEMICOL (1 << 14) /* ; */
|
||||
#define TC_NEWLINE (1 << 15)
|
||||
#define TC_STATX (1 << 16) /* ctl statement (for, next...) */
|
||||
#define TC_WHILE (1 << 17)
|
||||
#define TC_ELSE (1 << 18)
|
||||
#define TC_WHILE (1 << 17) /* 'while' */
|
||||
#define TC_ELSE (1 << 18) /* 'else' */
|
||||
#define TC_BUILTIN (1 << 19)
|
||||
/* This costs ~50 bytes of code.
|
||||
* A separate class to support deprecated "length" form. If we don't need that
|
||||
* (i.e. if we demand that only "length()" with () is valid), then TC_LENGTH
|
||||
* can be merged with TC_BUILTIN:
|
||||
*/
|
||||
#define TC_LENGTH (1 << 20)
|
||||
#define TC_GETLINE (1 << 21)
|
||||
#define TC_LENGTH (1 << 20) /* 'length' */
|
||||
#define TC_GETLINE (1 << 21) /* 'getline' */
|
||||
#define TC_FUNCDECL (1 << 22) /* 'function' 'func' */
|
||||
#define TC_BEGIN (1 << 23)
|
||||
#define TC_END (1 << 24)
|
||||
#define TC_BEGIN (1 << 23) /* 'BEGIN' */
|
||||
#define TC_END (1 << 24) /* 'END' */
|
||||
#define TC_EOF (1 << 25)
|
||||
#define TC_VARIABLE (1 << 26)
|
||||
#define TC_ARRAY (1 << 27)
|
||||
#define TC_FUNCTION (1 << 28)
|
||||
#define TC_STRING (1 << 29)
|
||||
#define TC_VARIABLE (1 << 26) /* name */
|
||||
#define TC_ARRAY (1 << 27) /* name[ */
|
||||
#define TC_FUNCTION (1 << 28) /* name( - but unlike TC_ARRAY, parser does not consume '(' */
|
||||
#define TC_STRING (1 << 29) /* "..." */
|
||||
#define TC_NUMBER (1 << 30)
|
||||
|
||||
#ifndef debug_parse_print_tc
|
||||
#define debug_parse_print_tc(n) do { \
|
||||
if ((n) & TC_SEQSTART) debug_printf_parse(" SEQSTART"); \
|
||||
if ((n) & TC_SEQTERM ) debug_printf_parse(" SEQTERM" ); \
|
||||
if ((n) & TC_LPAREN ) debug_printf_parse(" LPAREN" ); \
|
||||
if ((n) & TC_RPAREN ) debug_printf_parse(" RPAREN" ); \
|
||||
if ((n) & TC_REGEXP ) debug_printf_parse(" REGEXP" ); \
|
||||
if ((n) & TC_OUTRDR ) debug_printf_parse(" OUTRDR" ); \
|
||||
if ((n) & TC_UOPPOST ) debug_printf_parse(" UOPPOST" ); \
|
||||
@ -288,7 +288,7 @@ if ((n) & TC_NUMBER ) debug_printf_parse(" NUMBER" ); \
|
||||
//#define TS_UNARYOP (TS_UOPPRE | TC_UOPPOST)
|
||||
#define TS_OPERAND (TC_VARIABLE | TC_ARRAY | TC_FUNCTION \
|
||||
| TC_BUILTIN | TC_LENGTH | TC_GETLINE \
|
||||
| TC_SEQSTART | TC_STRING | TC_NUMBER)
|
||||
| TC_LPAREN | TC_STRING | TC_NUMBER)
|
||||
|
||||
#define TS_LVALUE (TC_VARIABLE | TC_ARRAY)
|
||||
#define TS_STATEMNT (TC_STATX | TC_WHILE)
|
||||
@ -310,7 +310,7 @@ if ((n) & TC_NUMBER ) debug_printf_parse(" NUMBER" ); \
|
||||
|
||||
/* if previous token class is CONCAT_L and next is CONCAT_R, concatenation */
|
||||
/* operator is inserted between them */
|
||||
#define TS_CONCAT_L (TC_VARIABLE | TC_ARRTERM | TC_SEQTERM \
|
||||
#define TS_CONCAT_L (TC_VARIABLE | TC_ARRTERM | TC_RPAREN \
|
||||
| TC_STRING | TC_NUMBER | TC_UOPPOST \
|
||||
| TC_LENGTH)
|
||||
#define TS_CONCAT_R (TS_OPERAND | TS_UOPPRE)
|
||||
@ -394,8 +394,8 @@ enum {
|
||||
#define NTCC '\377'
|
||||
|
||||
static const char tokenlist[] ALIGN1 =
|
||||
"\1(" NTC /* TC_SEQSTART */
|
||||
"\1)" NTC /* TC_SEQTERM */
|
||||
"\1(" NTC /* TC_LPAREN */
|
||||
"\1)" NTC /* TC_RPAREN */
|
||||
"\1/" NTC /* TC_REGEXP */
|
||||
"\2>>" "\1>" "\1|" NTC /* TC_OUTRDR */
|
||||
"\2++" "\2--" NTC /* TC_UOPPOST */
|
||||
@ -1250,9 +1250,9 @@ static uint32_t next_token(uint32_t expected)
|
||||
/* insert concatenation operator when needed */
|
||||
debug_printf_parse("%s: concat_inserted if all nonzero: %x %x %x %x\n", __func__,
|
||||
(last_token_class & TS_CONCAT_L), (tc & TS_CONCAT_R), (expected & TS_BINOP),
|
||||
!(last_token_class == TC_LENGTH && tc == TC_SEQSTART));
|
||||
!(last_token_class == TC_LENGTH && tc == TC_LPAREN));
|
||||
if ((last_token_class & TS_CONCAT_L) && (tc & TS_CONCAT_R) && (expected & TS_BINOP)
|
||||
&& !(last_token_class == TC_LENGTH && tc == TC_SEQSTART) /* but not for "length(..." */
|
||||
&& !(last_token_class == TC_LENGTH && tc == TC_LPAREN) /* but not for "length(..." */
|
||||
) {
|
||||
concat_inserted = TRUE;
|
||||
save_tclass = tc;
|
||||
@ -1304,10 +1304,10 @@ static void mk_re_node(const char *s, node *n, regex_t *re)
|
||||
xregcomp(re + 1, s, REG_EXTENDED | REG_ICASE);
|
||||
}
|
||||
|
||||
static node *condition(void)
|
||||
static node *parse_lrparen_list(void)
|
||||
{
|
||||
next_token(TC_SEQSTART);
|
||||
return parse_expr(TC_SEQTERM);
|
||||
next_token(TC_LPAREN);
|
||||
return parse_expr(TC_RPAREN);
|
||||
}
|
||||
|
||||
/* parse expression terminated by given argument, return ptr
|
||||
@ -1430,12 +1430,12 @@ static node *parse_expr(uint32_t term_tc)
|
||||
debug_printf_parse("%s: TC_FUNCTION\n", __func__);
|
||||
cn->info = OC_FUNC;
|
||||
cn->r.f = newfunc(t_string);
|
||||
cn->l.n = condition();
|
||||
cn->l.n = parse_lrparen_list();
|
||||
break;
|
||||
|
||||
case TC_SEQSTART:
|
||||
debug_printf_parse("%s: TC_SEQSTART\n", __func__);
|
||||
cn = vn->r.n = parse_expr(TC_SEQTERM);
|
||||
case TC_LPAREN:
|
||||
debug_printf_parse("%s: TC_LPAREN\n", __func__);
|
||||
cn = vn->r.n = parse_expr(TC_RPAREN);
|
||||
if (!cn)
|
||||
syntax_error("Empty sequence");
|
||||
cn->a.n = vn;
|
||||
@ -1449,21 +1449,21 @@ static node *parse_expr(uint32_t term_tc)
|
||||
|
||||
case TC_BUILTIN:
|
||||
debug_printf_parse("%s: TC_BUILTIN\n", __func__);
|
||||
cn->l.n = condition();
|
||||
cn->l.n = parse_lrparen_list();
|
||||
break;
|
||||
|
||||
case TC_LENGTH:
|
||||
debug_printf_parse("%s: TC_LENGTH\n", __func__);
|
||||
next_token(TC_SEQSTART /* length(...) */
|
||||
next_token(TC_LPAREN /* length(...) */
|
||||
| TS_OPTERM /* length; (or newline)*/
|
||||
| TC_GRPTERM /* length } */
|
||||
| TC_BINOPX /* length <op> NUM */
|
||||
| TC_COMMA /* print length, 1 */
|
||||
);
|
||||
rollback_token();
|
||||
if (t_tclass & TC_SEQSTART) {
|
||||
if (t_tclass & TC_LPAREN) {
|
||||
/* It was a "(" token. Handle just like TC_BUILTIN */
|
||||
cn->l.n = condition();
|
||||
cn->l.n = parse_lrparen_list();
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1562,7 +1562,7 @@ static void chain_group(void)
|
||||
case ST_IF:
|
||||
debug_printf_parse("%s: ST_IF\n", __func__);
|
||||
n = chain_node(OC_BR | Vx);
|
||||
n->l.n = condition();
|
||||
n->l.n = parse_lrparen_list();
|
||||
chain_group();
|
||||
n2 = chain_node(OC_EXEC);
|
||||
n->r.n = seq->last;
|
||||
@ -1576,7 +1576,7 @@ static void chain_group(void)
|
||||
|
||||
case ST_WHILE:
|
||||
debug_printf_parse("%s: ST_WHILE\n", __func__);
|
||||
n2 = condition();
|
||||
n2 = parse_lrparen_list();
|
||||
n = chain_loop(NULL);
|
||||
n->l.n = n2;
|
||||
break;
|
||||
@ -1587,14 +1587,14 @@ static void chain_group(void)
|
||||
n = chain_loop(NULL);
|
||||
n2->a.n = n->a.n;
|
||||
next_token(TC_WHILE);
|
||||
n->l.n = condition();
|
||||
n->l.n = parse_lrparen_list();
|
||||
break;
|
||||
|
||||
case ST_FOR:
|
||||
debug_printf_parse("%s: ST_FOR\n", __func__);
|
||||
next_token(TC_SEQSTART);
|
||||
n2 = parse_expr(TC_SEMICOL | TC_SEQTERM);
|
||||
if (t_tclass & TC_SEQTERM) { /* for-in */
|
||||
next_token(TC_LPAREN);
|
||||
n2 = parse_expr(TC_SEMICOL | TC_RPAREN);
|
||||
if (t_tclass & TC_RPAREN) { /* for-in */
|
||||
if (!n2 || (n2->info & OPCLSMASK) != OC_IN)
|
||||
syntax_error(EMSG_UNEXP_TOKEN);
|
||||
n = chain_node(OC_WALKINIT | VV);
|
||||
@ -1607,7 +1607,7 @@ static void chain_group(void)
|
||||
n = chain_node(OC_EXEC | Vx);
|
||||
n->l.n = n2;
|
||||
n2 = parse_expr(TC_SEMICOL);
|
||||
n3 = parse_expr(TC_SEQTERM);
|
||||
n3 = parse_expr(TC_RPAREN);
|
||||
n = chain_loop(n3);
|
||||
n->l.n = n2;
|
||||
if (!n2)
|
||||
@ -1686,13 +1686,13 @@ static void parse_program(char *p)
|
||||
f->body.first = NULL;
|
||||
f->nargs = 0;
|
||||
/* Match func arg list: a comma sep list of >= 0 args, and a close paren */
|
||||
while (next_token(TC_VARIABLE | TC_SEQTERM | TC_COMMA)) {
|
||||
while (next_token(TC_VARIABLE | TC_RPAREN | TC_COMMA)) {
|
||||
/* Either an empty arg list, or trailing comma from prev iter
|
||||
* must be followed by an arg */
|
||||
if (f->nargs == 0 && t_tclass == TC_SEQTERM)
|
||||
if (f->nargs == 0 && t_tclass == TC_RPAREN)
|
||||
break;
|
||||
|
||||
/* TC_SEQSTART/TC_COMMA must be followed by TC_VARIABLE */
|
||||
/* TC_LPAREN/TC_COMMA must be followed by TC_VARIABLE */
|
||||
if (t_tclass != TC_VARIABLE)
|
||||
syntax_error(EMSG_UNEXP_TOKEN);
|
||||
|
||||
@ -1700,7 +1700,7 @@ static void parse_program(char *p)
|
||||
v->x.aidx = f->nargs++;
|
||||
|
||||
/* Arg followed either by end of arg list or 1 comma */
|
||||
if (next_token(TC_COMMA | TC_SEQTERM) & TC_SEQTERM)
|
||||
if (next_token(TC_COMMA | TC_RPAREN) & TC_RPAREN)
|
||||
break;
|
||||
//Impossible: next_token() above would error out and die
|
||||
// if (t_tclass != TC_COMMA)
|
||||
|
Loading…
Reference in New Issue
Block a user