ATerm STRSGLR_is_parse_tree(ATerm trm) { if(SGisParseTree(trm)) { return trm; } else { return NULL; } }
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"); );