accept_t lexer_read_syntax(struct lexer_book * bk) { lexer_discard_white_space(bk); struct token *name = lexer_read_syntax_name(bk); if(strcmp("export", name->lexeme) == 0) return lexer_read_syntax_export(bk, name); else if(lexer_unquoted_look_ahead_count(bk, "=") > -1) return lexer_read_variable(bk, name); else { lexer_roll_back(bk, strlen(name->lexeme)); lexer_report_error(bk, "Unrecognized keyword: %s.", name->lexeme); } return NO; }
int lexer_read_syntax_or_variable(struct lexer * lx) { lexer_discard_white_space(lx); struct token *name = lexer_read_syntax_name(lx); if(strcmp("export", name->lexeme) == 0) return lexer_read_syntax_export(lx, name); else if(lexer_unquoted_look_ahead_count(lx, "=") > -1) return lexer_read_variable(lx, name); else { lexer_roll_back(lx, strlen(name->lexeme)); lexer_report_error(lx, "Unrecognized keyword: %s.", name->lexeme); } return 1; }
accept_t lexer_read_syntax_export(struct lexer_book *bk, struct token *name) { lexer_discard_white_space(bk); name->type = SYNTAX; lexer_push_token(bk, name); if(lexer_unquoted_look_ahead_count(bk, "=") > -1) return lexer_read_variable(bk, lexer_read_syntax_name(bk)); else return lexer_read_variable_list(bk); return YES; }
int lexer_read_syntax_export(struct lexer *lx, struct token *name) { lexer_discard_white_space(lx); //name->lexeme is "export" name->type = TOKEN_SYNTAX; lexer_push_token(lx, name); if(lexer_unquoted_look_ahead_count(lx, "=") > -1) lexer_read_variable(lx, lexer_read_syntax_name(lx)); else lexer_read_variable_list(lx); lexer_push_token(lx, lexer_pack_token(lx, TOKEN_NEWLINE)); return 1; }