Example #1
0
ATerm STRSGLR_is_parse_tree(ATerm trm)
{
    if(SGisParseTree(trm))
    {
        return trm;
    }
    else
    {
        return NULL;
    }
}
Example #2
0
int SG_Batch (int argc, char **argv)
{
  ATerm      parse_tree;

  parse_tree = SGparseFileUsingTable(program_name, 
                                     parse_table_name, 
                                     start_symbol,
                                     input_file_name, 
                                     output_file_name);
  if (!SG_OUTPUT) {
    return 0;
  }

  if (!parse_tree) {
    ATwarning("%s: error in %s: unexpected error\n",
              program_name, input_file_name);
    return 2;
  }

  if (SGisParseError(parse_tree)) {
    ATermList errlist;
    ATerm     errcode;
    AFun      err;
    int      c, line, col;

    errlist = (ATermList) ATgetArgument((ATermAppl) parse_tree, 0);
    errcode = ATgetArgument((ATermAppl) parse_tree, 1);
    c    = ATgetInt((ATermInt) ATgetArgument(ATelementAt(errlist, 0), 0));
    line = ATgetInt((ATermInt) ATgetArgument(ATelementAt(errlist, 1), 0));
    col  = ATgetInt((ATermInt) ATgetArgument(ATelementAt(errlist, 2), 0));
    err  = ATgetAFun(errcode);

    if (err == SG_EOF_Error_AFun) {
      ATwarning("%s: error in %s, line %d, col %d: end of file unexpected\n",
                program_name, input_file_name, line, col);
    }
    else if (err == SG_Plain_Error_AFun) {
      if (isprint(c)) {
        ATwarning("%s: error in %s, line %d, col %d: character `%c' (\\x%2.2x)"
                  " unexpected\n",
                  program_name, input_file_name, line, col, c, c);
      }
      else {
        ATwarning("%s: error in %s, line %d, col %d: character \\x%2.2x"
                  " unexpected\n",
                  program_name, input_file_name, line, col, c);
      }
    } 
    else if (err == SG_Cycle_Error_AFun) {
      ATwarning("%s: error in %s, line %d, col %d: cycle detected, productions: %t\n",
                program_name, 
                input_file_name, 
                line, 
                col, 
                ATgetArgument(errcode, 0));
    }
    else if (err == SG_Amb_Error_AFun) {
      int ambiescount = ATgetInt((ATermInt) ATgetArgument(errcode,0));
      ATwarning("%s: error in %s, line %d, col %d: cannot represent %d ambiguit%s\n",
                program_name, 
                input_file_name, 
                line, 
                col, 
                ambiescount,
                (ambiescount > 1) ? "ies" : "y" );
    }
    else if (err == SG_Too_Many_Ambiguities_Error_AFun) {
      ATwarning("%s: error in %s, line %d, col %d: too many ambiguities\n",
                program_name, input_file_name, line, col);
    }
    else {
      ATwarning("%s: error in %s, line %d, col %d: unknown error\n",
                program_name, input_file_name, line, col);
    }
    return 1;
  }
  else if(!SGisParseTree(parse_tree)) {
    ATwarning("%s: error: neither parse tree nor parse error for %s\n",
              program_name, input_file_name);
    return 1;
  }

  IF_VERBOSE(
    int  nrambs;
    char *sort;

    nrambs = SGnrAmb(SG_NR_ASK);
    sort   = SGsort(SG_GET, NULL);
    ATwarning("%s: %s parsed %s as sort %s, with %d ambiguit%s\n",
              program_name, parse_table_name, input_file_name,
              sort ? sort : "[undetermined]",
              nrambs, (nrambs==1)?"y":"ies");
  );