예제 #1
0
파일: tokenizer.c 프로젝트: CobooGuo/ubasic
/*---------------------------------------------------------------------------*/
void
tokenizer_next(void)
{

  if(tokenizer_finished()) {
    return;
  }

  DEBUG_PRINTF("tokenizer_next: %p\n", nextptr);
  ptr = nextptr;

  while(*ptr == ' ') {
    ++ptr;
  }
  current_token = get_next_token();

  if(current_token == TOKENIZER_REM) {
      while(!(*nextptr == '\n' || tokenizer_finished())) {
        ++nextptr;
      }
      if(*nextptr == '\n') {
        ++nextptr;
      }
      tokenizer_next();
  }

  DEBUG_PRINTF("tokenizer_next: '%s' %d\n", ptr, current_token);
  return;
}
예제 #2
0
void vvtbi_run (void)
{
  if (tokenizer_finished())
    return;
  /* interpret line-statements! */
  line_statement();
}
예제 #3
0
static void print_statement (void)
{
  accept(T_PRINT);
  do {
    /* Print a string literal. */
    if (tokenizer_token() == T_STRING)
    {
      printf("%s", tokenizer_string());
      tokenizer_next();
    }
    /* A seperator, send a space. */
    else if (tokenizer_token() == T_SEPERATOR)
    {
      printf(" ");
      tokenizer_next();
    }
    /* Evaluate and print an expression. */
    else if (tokenizer_token() == T_LETTER ||
    tokenizer_token() == T_NUMBER ||
    tokenizer_token() == T_LEFT_PAREN)
      printf("%d", expression());
    else
    {
      break;
    }
    /* This additionally ensures a new-line character
       is present at the end of the line-statement. */
    if (tokenizer_finished())
      accept(T_EOL);
  } while (tokenizer_token() != T_EOL &&
    tokenizer_token() != T_EOF);

  printf("\n");
  tokenizer_next();
}
예제 #4
0
파일: tokenizer.c 프로젝트: pelrun/CHDK
/*---------------------------------------------------------------------------*/
void
tokenizer_init(const char *program)
{
  ptr = program;
  current_line = 1;
  current_token = get_next_token();
  while (current_token==TOKENIZER_CR && !tokenizer_finished()) tokenizer_next();
}
예제 #5
0
/*---------------------------------------------------------------------------*/
void ubasic_run(void)
{
  if(tokenizer_finished()) {
    DEBUG_PRINTF("uBASIC program finished\n");
    return;
  }

  line_statements();
}
예제 #6
0
/*---------------------------------------------------------------------------*/
void ubasic_run(void)
{
	if(tokenizer_finished()) {
		ended = 1;
		glcd_TransFromBuf();
		return;
	}
	line_statement();
}
void tokenizer_next (void)
{
  if (tokenizer_finished())
    return;
  /* Skip whitespace. */
  while (io_current() == ' ' ||
  io_current() == '\t')
    io_next();
  token = get_next_token();
}
예제 #8
0
static void jump_linenum (int linenum)
{
  FILE *original;
  int   finished;

  /* Not only does this verify whether the scanner finished,
     if it has finished, it additionally closes the stream. */
  finished = tokenizer_finished();
  /* We save this copy in case the scanner wasn't finished. */
  original = io_handle();

  /* Start a new scanner from the beginning of the file. */
  tokenizer_init(io_file());
  reset(T_ERROR);
  io_reset();

  /* Search for linenum. */
  find_linenum(linenum);

  /* If the search ended at EOF, linenum could not be found! */
  if (tokenizer_finished())
  {
    dprintf(
      "*warning: could not jump to `%d'\n",
      E_WARNING, linenum);
    /* Set back to original stream */
    io_set(io_file(), original);
    /* Prepare scanner to continue. */
    if (!finished)
    {
      reset(T_NUMBER);
      io_reset();
      io_next();
    }
  }
}
예제 #9
0
/*---------------------------------------------------------------------------*/
void
tokenizer_next(void)
{

  if(tokenizer_finished()) {
    return;
  }

  DEBUG_PRINTF("tokenizer_next: %p\n", nextptr);
  ptr = nextptr;
  while(*ptr == ' ') {
    ++ptr;
  }
  current_token = get_next_token();
  DEBUG_PRINTF("tokenizer_next: '%s' %ld\n", ptr, current_token);
  return;
}
예제 #10
0
/*---------------------------------------------------------------------------*/
int ubasic_finished(void)
{
  return ended || tokenizer_finished();
}
예제 #11
0
int vvtbi_finished (void)
{
  /* The interpreter is finished! */
  return tokenizer_finished();
}