static void print_parse(s3_cfg_t *_cfg, s3_cfg_entry_t *_parse, FILE *_out, int _depth) { int i; assert(_cfg != NULL); assert(_parse != NULL); if (_parse->back != NULL) print_parse(_cfg, _parse->back, _out, _depth); if (_parse->dot == 0) { for (i = _depth - 1; i >= 0; i--) fprintf(_out, "> "); s3_cfg_print_rule(_cfg, _parse->rule, _out); fprintf(_out, "\n"); } if (_parse->complete != NULL) print_parse(_cfg, _parse->complete, _out, _depth + 1); }
/*-----------------------------------------------------------------------* * Main routine which takes a string as input and returns a parse string * *-----------------------------------------------------------------------*/ Gal_Frame send_to_parse(Gal_Frame f, void *server_data) { int i, path_score; char *in_string, *out_string, *sysid; Gal_Frame f_new = Gal_MakeFrame("main", GAL_CLAUSE); /* get the input string to parse from the key's value */ in_string = Gal_GetString(f, ":input_string"); sysid = Gal_GetString(f, ":sysid"); path_score = Gal_GetInt(f, ":path_score"); if (in_string == NULL) in_string = Gal_GetString(f, ":parse_input"); /* strip out punctuation, comments, etc, to uppercase */ strip_line(in_string); /* Call Phoenix Parse function */ parse(in_string, gram); /* print parses to buffer */ if( num_parses > MaxParses ) num_parses= MaxParses; if( num_parses < 1 ) { strcpy(outbuf, "No Parse"); } else { out_string= outbuf; for(i= 0; i < num_parses; i++ ) { sprintf(out_string, "PARSE_%d:\n", i); out_string += strlen(out_string); print_parse(i, out_string, extract, gram); out_string += strlen(out_string); sprintf(out_string, "END_PARSE\n"); out_string += strlen(out_string); } sprintf(out_string, "\n"); out_string= outbuf; } /* clear parser temps */ reset(num_nets); /* create a new frame containing the parse */ Gal_SetProp(f_new, ":parse_input", Gal_StringObject(in_string)); Gal_SetProp(f_new, ":parse_output", Gal_StringObject(outbuf)); if (sysid != NULL) Gal_SetProp(f_new, ":sysid", Gal_StringObject(sysid)); if (path_score != 0) Gal_SetProp(f_new, ":path_score", Gal_IntObject(path_score)); /* write parse output frame to HUB */ GalSS_EnvWriteFrame((GalSS_Environment *) server_data, f_new, 0); return(f); }
int main() { char *linha; COMMAND com; while (1) { if ((linha = readline("my_prompt$ ")) == NULL) exit(0); if (strlen(linha) != 0) { add_history(linha); //biblioteca readline, historico de comandos que escrevi com = parse(linha); if(strcmp(com.cmd ,"exit")==0) exit(0); print_parse(com); } free(linha); } }
void s3_cfg_print_parse(s3_cfg_t *_cfg, s3_cfg_entry_t *_parse, FILE *_out) { print_parse(_cfg, _parse, _out, 0); }