parse: lex: switch from arithmetic to statement when scanning =, |, and \n
This commit is contained in:
@@ -135,7 +135,7 @@ static enum bshell_status arithmetic_pump_token(struct lex_ctx *ctx)
|
|||||||
if (newline) {
|
if (newline) {
|
||||||
struct lex_token *tok = lex_token_create(TOK_LINEFEED);
|
struct lex_token *tok = lex_token_create(TOK_LINEFEED);
|
||||||
enqueue_token(ctx, tok);
|
enqueue_token(ctx, tok);
|
||||||
lex_state_change(ctx, LEX_STATE_STATEMENT);
|
handle_lex_state_transition(ctx, TOK_LINEFEED);
|
||||||
return BSHELL_SUCCESS;
|
return BSHELL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,10 +148,13 @@ static enum bshell_status arithmetic_pump_token(struct lex_ctx *ctx)
|
|||||||
|
|
||||||
static const struct lex_state_link links[] = {
|
static const struct lex_state_link links[] = {
|
||||||
LINK_CHANGE(TOK_WORD, LEX_STATE_COMMAND),
|
LINK_CHANGE(TOK_WORD, LEX_STATE_COMMAND),
|
||||||
|
LINK_CHANGE(SYM_EQUAL, LEX_STATE_STATEMENT),
|
||||||
LINK_PUSH(SYM_DQUOTE, LEX_STATE_STRING, 0),
|
LINK_PUSH(SYM_DQUOTE, LEX_STATE_STRING, 0),
|
||||||
LINK_PUSH(SYM_DOLLAR_LEFT_PAREN, LEX_STATE_STATEMENT, 0),
|
LINK_PUSH(SYM_DOLLAR_LEFT_PAREN, LEX_STATE_STATEMENT, 0),
|
||||||
LINK_POP(SYM_RIGHT_PAREN),
|
LINK_POP(SYM_RIGHT_PAREN),
|
||||||
LINK_CHANGE(SYM_SEMICOLON, LEX_STATE_STATEMENT),
|
LINK_CHANGE(SYM_SEMICOLON, LEX_STATE_STATEMENT),
|
||||||
|
LINK_CHANGE(TOK_LINEFEED, LEX_STATE_STATEMENT),
|
||||||
|
LINK_CHANGE(SYM_PIPE, LEX_STATE_STATEMENT),
|
||||||
LINK_PUSH(SYM_AT_LEFT_BRACE, LEX_STATE_HASHTABLE, 0),
|
LINK_PUSH(SYM_AT_LEFT_BRACE, LEX_STATE_HASHTABLE, 0),
|
||||||
LINK_PUSH(
|
LINK_PUSH(
|
||||||
SYM_LEFT_PAREN,
|
SYM_LEFT_PAREN,
|
||||||
|
|||||||
Reference in New Issue
Block a user