int dag_parse(struct dag *d, FILE * dag_stream) { char *line = NULL; struct lexer_book *bk = calloc(1, sizeof(struct lexer_book)); //Taking advantage that calloc zeroes memory bk->d = d; bk->stream = dag_stream; bk->category = dag_task_category_lookup_or_create(d, "default"); while((line = dag_parse_readline(bk, NULL)) != NULL) { if(strlen(line) == 0 || line[0] == '#') { /* Skip blank lines and comments */ free(line); continue; } if(strncmp(line, "export ", 7) == 0) { if(!dag_parse_export(bk, line)) { dag_parse_error(bk, "export"); goto failure; } } else if(strchr(line, '=')) { if(!dag_parse_variable(bk, NULL, line)) { dag_parse_error(bk, "variable"); goto failure; } } else if(strstr(line, ":")) { if(!dag_parse_node(bk, line)) { dag_parse_error(bk, "node"); goto failure; } } else { dag_parse_error(bk, "syntax"); goto failure; } free(line); } //ok dag_close_over_environment(d); dag_compile_ancestors(d); free(bk); return 1; failure: free(line); free(bk); return 0; }
static int dag_parse_syntax(struct lexer *bk) { struct token *t = lexer_next_token(bk); if(strcmp(t->lexeme, "export") == 0) { lexer_free_token(t); dag_parse_export(bk); } else { lexer_report_error(bk, "Unknown syntax keyboard.\n"); } return 1; }