Ejemplo n.º 1
0
/*********************************************************************
  return: next character from current input stream
**********************************************************************/
static int getnext(void)
{
  int ch;

  if(inputputbackcount > 0)
  {
    ch = inputputback[--inputputbackcount];
    (current->columnnr)++;
    return ch;
  }
  if(inputstate == CLOSED)
    systemerror(9);
  if(current->columnnr > 0 && inputbuffer[current->columnnr-1] == '\0')
  {
    if(inputstate == EXPRESSIONINPUT)
      return EOF;
    else if(current->fp == NULL || !fgets(inputbuffer, stringsize, current->fp))
    {
      closeinput();
      return inputstate==FILEINPUT ? getnext() : EOF;
    }
    (current->linenr)++;
    current->columnnr = 0;
    if(preprocess()) return getnext();
  }
  ch = inputbuffer[(current->columnnr)++];
  if(ch == '\0') ch = '\n';
  return ch;
}
Ejemplo n.º 2
0
bool parseinput(char s[])
{
  bool result = False;

  setchecktypevariables(NOCHECK);
  openinput(s);
  checkmemlarge();
  storefunctionname("");
  tokenoffside = 0;
  gettoken();
  if(tokentype == empty)
  {
    push(template_nil);
    return result;
  }
  parseexpression(MAXPRIO);
  if(tokentype == WHERE)
  {
    gettoken();
    parsewhereclause();
  }
  if(tokentype == COLONS) result = True;
  else if(tokentype != empty) parseerror(19);
  closeinput();
  initrename("");
  settop(renamerec(EXP, top()));
  return result;
}
Ejemplo n.º 3
0
void openinput(char s[])
{
  while(inputstate != CLOSED) closeinput();
  inputstate = EXPRESSIONINPUT;
  strcpy(current->name, "");
  strncat(strcpy(inputbuffer, ""), s, sizeof(inputbuffer)-1);
  current->columnnr = 0;
  inputputbackcount = 0;
}
Ejemplo n.º 4
0
void parsetypeexpr(char s[])
{
  setchecktypevariables(NOCHECK);
  openinput(s);
  checkmemlarge();
  tokenoffside = 0;
  gettoken();
  parsetype(TYPEEXPR);
  closeinput();
}
Ejemplo n.º 5
0
void parsefile(char filename[])
{
  setchecktypevariables(NOCHECK);
  openfileinput(filename);
  tokenoffside = 0;
  gettoken();
  while(tokentype != empty)
  {
    checkmemlarge();
    parsedefinition(True);
    tokenoffside = 0;
    if(tokentype == offside) gettoken();
  }
  closeinput();
}
Ejemplo n.º 6
0
void lexerror(void)
{
  if(inputstate == EXPRESSIONINPUT || strcmp(current->name, "") == 0)
  {
    int k, l = current->columnnr + strlen(GetOption("ConPrompt"));
    for(k=1; k<l; k++) Write(" ");
    Write("^");
  }
  else
  {
    Write("file  : %s\n", current->name);
    Write("line  : %d\n", current->linenr);
    Write("column: %d\n", current->columnnr);
    while(inputstate != CLOSED) closeinput();
  }
}