Пример #1
0
static void
digest_file (const char *file)
{
	scanner_t *scanner = scanner_new (file); 
	parse_program (scanner);
	scanner_free (scanner);
}
Пример #2
0
void test_scanner (void)
{
    scanner_t *scanner = scanner_new(testdata);

    assert(!scanner_is_at_end(scanner));
    assert(scanner_line_number(scanner) == 1);
    assert(scanner_next_token(scanner) == TOKEN_SYMBOL);
    assert(scanner_token_type(scanner) == TOKEN_SYMBOL);
    assert(strcmp(scanner_token_string_value(scanner), "a") == 0);
    assert(scanner_next_token(scanner) == '.');
    assert(scanner_next_token(scanner) == TOKEN_SYMBOL);
    assert(strcmp(scanner_token_string_value(scanner), "_b") == 0);
    assert(scanner_next_token(scanner) == TOKEN_EQUAL);
    assert(scanner_next_token(scanner) == TOKEN_SYMBOL);
    assert(strcmp(scanner_token_string_value(scanner), "len") == 0);
    assert(scanner_next_token(scanner) == '(');
    assert(scanner_next_token(scanner) == TOKEN_STRING);
    assert(strcmp(scanner_token_string_value(scanner), "x\"") == 0);
    assert(scanner_next_token(scanner) == ')');
    assert(scanner_next_token(scanner) == '+');
    assert(scanner_next_token(scanner) == TOKEN_NUMBER);
    assert(scanner_token_double_value(scanner) == 1.7e1);
    assert(!scanner_is_at_end(scanner));
    assert(scanner_line_number(scanner) == 2);
    assert(scanner_next_token(scanner) == TOKEN_STRING);
    assert(strcmp(scanner_token_string_value(scanner),
		  "\\'\t\n\1234\x1a\018") == 0);
    assert(scanner_is_at_end(scanner));
    assert(scanner_line_number(scanner) == 3);
    assert(scanner_next_token(scanner) == TOKEN_NONE);
    assert(scanner_position(scanner) == strlen(testdata));

    scanner_free(scanner);
}
Пример #3
0
struct verilog_module *verilog_parse_fd(FILE *fd)
{
	struct scanner *s;
	int tok;
	void *p;
	char *stoken;
	struct verilog_module *m;

	//ParseTrace(stdout, "parser: ");
	s = scanner_new(fd);
	m = verilog_new_module();
	p = ParseAlloc(malloc);
	assert(p != NULL);
	tok = scanner_scan(s);
	while(tok != TOK_EOF) {
		stoken = scanner_get_token(s);
		Parse(p, tok, stoken, m);
		tok = scanner_scan(s);
	}
	Parse(p, TOK_EOF, NULL, m);
	ParseFree(p, free);
	scanner_free(s);

	return m;
}
Пример #4
0
void parse_free(void)
{
    named_buffer_free(s->initial_named_buffer);
    map_free(s->initial_symbols);

    named_buffer_free(s->named_buffer);
    chunkpool_free(s->atom_pool);
    chunkpool_free2(s->vec_pool, (cb_free*)free_vec_pool);
    named_buffer_free(s->named_buffer);
    map_free(s->sym_table);
    scanner_free();
    expr_free();
}
Пример #5
0
static void
freeze_main(struct value *args, struct value *result)
{
	struct process *p;
	struct scanner *sc;
        struct reporter *r;
	struct value term;

        struct value *termfile, *binfile;
        struct value termfile_sym, binfile_sym;

        value_symbol_new(&termfile_sym, "termfile", 8);
        value_symbol_new(&binfile_sym, "binfile", 7);
  	termfile = value_dict_fetch(args, &termfile_sym);
	binfile = value_dict_fetch(args, &binfile_sym);

	r = reporter_new("Freezing", NULL, 1);

	/*
	 * Parse.
	 */
	sc = scanner_new(r);
	if (!scanner_open(sc, value_symbol_get_token(termfile))) {
                value_integer_set(result, 1);
                return;
        }
	if (!value_discern(&term, sc)) {
		report(r, REPORT_ERROR, "Could not parse input term");
        }

	/*
	 * Write out.
	 */
	p = file_open(value_symbol_get_token(binfile), "w");
	if (!value_save(p, &term)) {
		report(r, REPORT_ERROR,
		   "Could not write term to '%s'", binfile);
	}
	stream_close(NULL, p);

	/*
	 * Finish up.
	 */
	scanner_close(sc);
	scanner_free(sc);

	value_integer_set(result, reporter_has_errors(r) ? 1 : 0);
	reporter_free(r);
}
Пример #6
0
static int
filter_lines (struct scanner *s)
{
  char b[8192] = { 0 };

  if (s == NULL)
    return -1;
  while (scanner_readline (s, b, sizeof (b)) >= 0) {
    filter (b);
    if (*b)
      puts (b);
  }
  scanner_free (s);
  return 0;
}
Пример #7
0
static int randvar_read_PHI ()
{
# define CUR_PROC "randvar_read_PHI"
  int res = -1;
  char filename = "ghmm/PHI_001_20.dat";
  scanner_t *s = NULL;

//#warning "PHI_DATA_FILE deprecated!"
  s = scanner_alloc (filename);
  if (!s) {
    mes_proc ();
    goto STOP;
  }
  scanner_get_name (s);
  scanner_consume (s, '=');
  if (s->err)
    goto STOP;
  if (!strcmp (s->id, "PHI")) {
    scanner_consume (s, '{');
    if (s->err)
      goto STOP;
    PHI = scanner_get_double_earray (s, &PHI_len);
    if (s->err)
      goto STOP;
    scanner_consume (s, ';');
    if (s->err)
      goto STOP;
    scanner_consume (s, '}');
    if (s->err)
      goto STOP;
    scanner_consume (s, ';');
    if (s->err)
      goto STOP;
  }
  else {
    scanner_error (s, "unknown identifier");
    goto STOP;
  }
  // printf("%.4f\n", PHI[PHI_len-1]); 

  res = 0;;
STOP:
  scanner_free (&s);
  return res;
# undef CUR_PROC
}