| 91 |
91 |
EXPR_FNAME, /* ignore newline, no reserved words. */
|
| 92 |
92 |
EXPR_DOT, /* right after `.' or `::', no reserved words. */
|
| 93 |
93 |
EXPR_CLASS, /* immediate after `class', no here document. */
|
|
94 |
EXPR_VALUE /* alike EXPR_BEG but label is disallowed. */
|
| 94 |
95 |
} lex_state;
|
| 95 |
96 |
static NODE *lex_strterm;
|
| 96 |
97 |
|
| ... | ... | |
| 267 |
268 |
k__LINE__
|
| 268 |
269 |
k__FILE__
|
| 269 |
270 |
|
| 270 |
|
%token <id> tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR
|
|
271 |
%token <id> tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL
|
| 271 |
272 |
%token <node> tINTEGER tFLOAT tSTRING_CONTENT
|
| 272 |
273 |
%token <node> tNTH_REF tBACK_REF
|
| 273 |
274 |
%token <num> tREGEXP_END
|
| ... | ... | |
| 2504 |
2505 |
{
|
| 2505 |
2506 |
$$ = list_append(NEW_LIST($1), $3);
|
| 2506 |
2507 |
}
|
|
2508 |
| tLABEL arg_value
|
|
2509 |
{
|
|
2510 |
$$ = list_append(NEW_LIST(NEW_LIT(ID2SYM($1))), $2);
|
|
2511 |
}
|
| 2507 |
2512 |
;
|
| 2508 |
2513 |
|
| 2509 |
2514 |
operation : tIDENTIFIER
|
| ... | ... | |
| 3434 |
3439 |
}
|
| 3435 |
3440 |
|
| 3436 |
3441 |
#define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
|
| 3437 |
|
#define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_CLASS)
|
|
3442 |
#define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || \
|
|
3443 |
lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
|
| 3438 |
3444 |
|
| 3439 |
3445 |
static int
|
| 3440 |
3446 |
yylex()
|
| ... | ... | |
| 3491 |
3497 |
case EXPR_FNAME:
|
| 3492 |
3498 |
case EXPR_DOT:
|
| 3493 |
3499 |
case EXPR_CLASS:
|
|
3500 |
case EXPR_VALUE:
|
| 3494 |
3501 |
goto retry;
|
| 3495 |
3502 |
default:
|
| 3496 |
3503 |
break;
|
| ... | ... | |
| 3673 |
3680 |
|
| 3674 |
3681 |
case '?':
|
| 3675 |
3682 |
if (lex_state == EXPR_END || lex_state == EXPR_ENDARG) {
|
| 3676 |
|
lex_state = EXPR_BEG;
|
|
3683 |
lex_state = EXPR_VALUE;
|
| 3677 |
3684 |
return '?';
|
| 3678 |
3685 |
}
|
| 3679 |
3686 |
c = nextc();
|
| ... | ... | |
| 3710 |
3717 |
}
|
| 3711 |
3718 |
ternary:
|
| 3712 |
3719 |
pushback(c);
|
| 3713 |
|
lex_state = EXPR_BEG;
|
|
3720 |
lex_state = EXPR_VALUE;
|
| 3714 |
3721 |
return '?';
|
| 3715 |
3722 |
}
|
| 3716 |
3723 |
else if (ismbchar(c)) {
|
| ... | ... | |
| 4526 |
4533 |
}
|
| 4527 |
4534 |
}
|
| 4528 |
4535 |
|
|
4536 |
if ((lex_state == EXPR_BEG && !cmd_state) ||
|
|
4537 |
lex_state == EXPR_ARG ||
|
|
4538 |
lex_state == EXPR_CMDARG) {
|
|
4539 |
if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
|
|
4540 |
lex_state = EXPR_BEG;
|
|
4541 |
nextc();
|
|
4542 |
yylval.id = rb_intern(tok());
|
|
4543 |
return tLABEL;
|
|
4544 |
}
|
|
4545 |
}
|
|
4546 |
|
| 4529 |
4547 |
if (lex_state != EXPR_DOT) {
|
| 4530 |
4548 |
const struct kwtable *kw;
|
| 4531 |
4549 |
|
| ... | ... | |
| 4547 |
4565 |
return kDO_BLOCK;
|
| 4548 |
4566 |
return kDO;
|
| 4549 |
4567 |
}
|
| 4550 |
|
if (state == EXPR_BEG)
|
|
4568 |
if (state == EXPR_BEG || state == EXPR_VALUE)
|
| 4551 |
4569 |
return kw->id[0];
|
| 4552 |
4570 |
else {
|
| 4553 |
4571 |
if (kw->id[0] != kw->id[1])
|
| ... | ... | |
| 4557 |
4575 |
}
|
| 4558 |
4576 |
}
|
| 4559 |
4577 |
|
| 4560 |
|
if (lex_state == EXPR_BEG ||
|
| 4561 |
|
lex_state == EXPR_MID ||
|
|
4578 |
if (IS_BEG() ||
|
| 4562 |
4579 |
lex_state == EXPR_DOT ||
|
| 4563 |
|
lex_state == EXPR_ARG ||
|
| 4564 |
|
lex_state == EXPR_CLASS ||
|
| 4565 |
|
lex_state == EXPR_CMDARG) {
|
|
4580 |
IS_ARG()) {
|
| 4566 |
4581 |
if (cmd_state) {
|
| 4567 |
4582 |
lex_state = EXPR_CMDARG;
|
| 4568 |
4583 |
}
|