int get_next_line(int const fd, char **line) { int ret; static t_gnl *lst; t_gnl *token; if (fd < 0 || (!(token = get_token_fd(&lst, fd))) || !line) return (-1); while ((ret = check_end_line(token, line)) != 1) { if (token->flag_read == 0 || ret == -1) { if ((ret = read_new_line(token)) == 0) token->flag_read = 1; else if (ret == -1) { clear_token(&lst, fd, line); return (-1); } } else if (token->flag_read == 1 && ret == 0) return (clear_token(&lst, fd, line)); } return (1); }
int Scanner::read_num() { clear_token(); bool hex_dec_mode = false; if (cur_char() == '0' && next_char() == 'x') { push_char(cur_char()); go_ahead(); push_char(cur_char()); go_ahead(); hex_dec_mode = true; } while (true) { char c = cur_char(); if (hex_dec_mode) { if (!is_hex_dec(c)) { break; } } else { if (!is_dec(c)) { break; } } push_char(cur_char()); go_ahead(); } return s_info->num_token; }
int Scanner::read_sym() { clear_token(); while (is_symbody(cur_char())) { push_char(cur_char()); go_ahead(); } return s_info->sym_token; }
int main(int argc, char *argv[]) { argv[1]="praktek2.txt"; init_token(argv[1]); while(get_token()!=EOF){ printf("%3d %3d %s \n",token.attr, token.value, token.charvalue); clear_token(); } return 0; }
void number(void) //untuk mengecek statement yang angka { if(isnumbr) { clear_token(); get_token(); if(!isplus && !isminus && !istimes) { printf("Error : operator is expected\n"); exit(-1); } clear_token(); get_token(); if(!isnumbr) { printf("Error : statement is expected\n"); exit(-1); } } }
int Scanner::read_str() { clear_token(); go_ahead(); while (1) { int c = cur_char(); if (c == '\n') { return -1; } if (c == '\"') { go_ahead(); break; } if (c == '\\') { go_ahead(); c = cur_char(); } push_char(c); go_ahead(); } return s_info->str_token; }
void delete_token(struct token **tok) { clear_token(*tok); free((*tok)); (*tok) = NULL; }