示例#1
0
void cli_js_output(struct parser_state *state, const char *tempdir)
{
	unsigned i;
	struct buf buf;
	char lastchar = '\0';
	char filename[1024];

	snprintf(filename, 1024, "%s"PATHSEP"javascript", tempdir);

	buf.pos = 0;
	buf.outfd = open(filename, O_CREAT | O_WRONLY, 0600);
	if(buf.outfd < 0) {
		cli_errmsg(MODULE "cannot open output file for writing: %s\n", filename);
		return;
	}
	/* append to file */
	if(lseek(buf.outfd, 0, SEEK_END) != 0) {
		/* separate multiple scripts with \n */
		buf_outc('\n', &buf);
	}
	buf_outs("<script>", &buf);
	state->current = state->global;
	for(i = 0; i < state->tokens.cnt; i++) {
		if(state_update_scope(state, &state->tokens.data[i]))
			lastchar = output_token(&state->tokens.data[i], state->current, &buf, lastchar);
	}
	/* add /script if not already there */
	if(buf.pos < 9 || memcmp(buf.buf + buf.pos - 9, "</script>", 9))
		buf_outs("</script>", &buf);
	if(write(buf.outfd, buf.buf, buf.pos) < 0) {
		cli_dbgmsg(MODULE "I/O error\n");
	}
	close(buf.outfd);
	cli_dbgmsg(MODULE "dumped/appended normalized script to: %s\n",filename);
}
示例#2
0
static int
lex(struct pe_lexer *l)
{
	struct pe_lexeme t;

	for (;;) {
		pe_lexer_lexeme(l, &t);

		switch (t.type) {
		case pe_lexeme_eoi:
			return 1;
		case pe_lexeme_undefined:
			output_token(&t);
			switch(t.error_type) {
			case pe_lexeme_id:
				fputs(" id", stdout);
				break;
			case pe_lexeme_kw:
				fputs(" kw", stdout);
				if (t.error == pe_lexeme_kw_unknown)
					fputs("?", stdout);
				break;
			case pe_lexeme_eos:
				fputs(" eos", stdout);
				break;
			case pe_lexeme_int:
				fputs(" str", stdout);
				if (t.error == pe_lexeme_int_overflow) {
					fputs(" >", stdout);
				}
				break;
			case pe_lexeme_str:
				fputs(" str", stdout);
				if (t.error == pe_lexeme_str_unterminated) {
					fputs(" +", stdout);
				}
				break;
			case pe_lexeme_undefined:
				fputs(" ?", stdout);
				break;
			case pe_lexeme_eoi:
				abort();
			}
			break;
		default:
			break;
		}

		switch (t.error) {
		case pe_lexeme_bad_char:
			fprintf(stdout, " \"%c\" (ASCII %d)\n", t.v.bad_char, (int)t.v.bad_char);
			return 1;
			
		case pe_lexeme_application_error:
			return 0;
		default:
			break;
		}
	}
}
示例#3
0
void eat_it(tokenizer_t t, token_kind_t tok_kind){
    struct token tok = cur_tok(t);
    if (tok_kind != TOK_ANY && tok.kind != tok_kind){
        printf("expected ");
        output_token_kind(tok_kind);
        printf("unexpected ");
        output_token_kind(tok.kind);
        syntax_error(t, "eat_it error");
    }
    output_token(t);
    next_tok(t);
}
示例#4
0
void wm_decode_macro (unsigned char *buff, uint32_t len, int hex_output)
{
    int i, j;
    uint8_t s_length;
    uint16_t w_length, int_val;
    unsigned char *tmp_buff, *tmp_name, *line_start;

    i = 2;
    line_start = buff;
    while (i < len) {
	switch (buff[i]) {
	case 0x65:
	    s_length = (uint8_t) buff[i + 1];
	    tmp_buff = (unsigned char *) malloc (s_length + 1);
	    strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length);
	    tmp_buff[s_length] = '\0';
	    print_hex_buff (line_start, buff + i + 2 + s_length, hex_output);
	    printf ("\n%s", tmp_buff);
	    free (tmp_buff);
	    i += 2 + s_length;
	    line_start = buff + i;
	    break;
	case 0x69:
	    s_length = (uint8_t) buff[i + 1];
	    tmp_buff = (unsigned char *) malloc (s_length + 1);
	    strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length);
	    tmp_buff[s_length] = '\0';
	    printf (" %s", tmp_buff);
	    free (tmp_buff);
	    i += 2 + s_length;
	    break;
	case 0x6a:
	    s_length = (uint8_t) buff[i + 1];
	    tmp_buff = (unsigned char *) malloc (s_length + 1);
	    strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length);
	    tmp_buff[s_length] = '\0';
	    printf (" \"%s\"", tmp_buff);
	    free (tmp_buff);
	    i += 2 + s_length;
	    break;
	case 0x6b:
	    s_length = (uint8_t) buff[i + 1];
	    tmp_buff = (unsigned char *) malloc (s_length + 1);
	    strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length);
	    tmp_buff[s_length] = '\0';
	    printf (" '%s", tmp_buff);
	    free (tmp_buff);
	    i += 2 + s_length;
	    break;
	case 0x6d:
	    s_length = (uint8_t) buff[i + 1];
	    tmp_buff = (unsigned char *) malloc (s_length + 1);
	    strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length);
	    tmp_buff[s_length] = '\0';
	    printf (" %s", tmp_buff);
	    free (tmp_buff);
	    i += 2 + s_length;
	    break;
	case 0x70:
	    s_length = (uint8_t) buff[i + 1];
	    tmp_buff = (unsigned char *) malloc (s_length + 1);
	    strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length);
	    tmp_buff[s_length] = '\0';
	    printf ("REM%s", tmp_buff);
	    free (tmp_buff);
	    i += 2 + s_length;
	    break;
	case 0x76:
	    s_length = (uint8_t) buff[i + 1];
	    tmp_buff = (unsigned char *) malloc (s_length + 1);
	    strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length);
	    tmp_buff[s_length] = '\0';
	    printf (" .%s", tmp_buff);
	    free (tmp_buff);
	    i += 2 + s_length;
	    break;
	case 0x77:
	    s_length = (uint8_t) buff[i + 1];
	    tmp_buff = (unsigned char *) malloc (s_length + 1);
	    strncpy ((char *) tmp_buff, (char *) (buff + i + 2), s_length);
	    tmp_buff[s_length] = '\0';
	    printf ("%s", tmp_buff);
	    free (tmp_buff);
	    i += 2 + s_length;
	    break;
	case 0x79:		/* unicode "string" */
	    w_length = (uint16_t) (buff[i + 2] << 8) + buff[i + 1];
	    tmp_buff = (unsigned char *) malloc ((w_length * 2) + 1);
	    memcpy (tmp_buff, buff + i + 3, w_length * 2);
	    tmp_name = (unsigned char *) get_unicode_name ((char *) tmp_buff, w_length * 2);
	    free (tmp_buff);
	    printf ("\"%s\"", tmp_name);
	    free (tmp_name);
	    i += 3 + (w_length * 2);
	    break;

	case 0x7c:		/* unicode 'string */
	    s_length = (uint8_t) buff[i + 1];
	    tmp_buff = (unsigned char *) malloc ((s_length * 2) + 1);
	    memcpy (tmp_buff, buff + i + 2, s_length * 2);
	    tmp_name = (unsigned char *) get_unicode_name ((char *) tmp_buff, s_length * 2);
	    free (tmp_buff);
	    printf ("'%s", tmp_name);
	    free (tmp_name);
	    i += 2 + (s_length * 2);
	    break;

	case 0x66:
	    int_val = (uint8_t) (buff[i + 2] << 8) + buff[i + 1];
	    print_hex_buff (line_start, buff + i + 3, hex_output);
	    printf ("\n%d", int_val);
	    i += 3;
	    line_start = buff + i;
	    break;
	case 0x67:
	    w_length = (uint16_t) (buff[i + 2] << 8) + buff[i + 1];
	    output_token67 (w_length);
	    i += 3;
	    break;
	case 0x68:
	    /* 8-byte float */
	    printf ("(float)");
	    i += 9;
	    break;
	case 0x6c:
	    int_val = (uint16_t) (buff[i + 2] << 8) + buff[i + 1];
	    printf (" %d", int_val);
	    i += 3;
	    break;
	case 0x6e:
	    s_length = (uint8_t) buff[i + 1];
	    for (j = 0; j < s_length; j++) {
		printf (" ");
	    }
	    i += 2;
	    break;
	case 0x6f:
	    s_length = (uint8_t) buff[i + 1];
	    for (j = 0; j < s_length; j++) {
		printf ("\t");
	    }
	    i += 2;
	    break;
	case 0x73:
	    w_length = (uint16_t) (buff[i + 2] << 8) + buff[i + 1];
	    output_token73 (w_length);
	    i += 3;
	    break;
	case 0x64:
	    print_hex_buff (line_start, buff + i + 1, hex_output);
	    printf ("\n");
	    i++;
	    line_start = buff + i;
	    break;
	default:
	    output_token (buff[i]);
	    i++;
	    break;
	}
    }
    print_hex_buff (line_start, buff + i, hex_output);
}
示例#5
0
文件: token.c 项目: 52M/unispim
void output_correct_token(HZ *hz, int count)
{
	if (is_correct_token(hz, count))
		output_token(hz, count);
}