/*===================== parser.c commandline ========================*/
/*===================================================================*/
-bool parser_init ();
-bool parser_compile(const char *filename);
-bool parser_finish (const char *output);
-void parser_cleanup();
+bool parser_init ();
+bool parser_compile_file (const char *filename);
+bool parser_compile_string(const char *name, const char *str);
+bool parser_finish (const char *output);
+void parser_cleanup ();
/*===================================================================*/
/*======================= main.c commandline ========================*/
(items_data[itr].type == TYPE_SRC ? "progs.src" :
("unknown"))))));
- if (!parser_compile(items_data[itr].filename)) {
+ if (!parser_compile_file(items_data[itr].filename)) {
retval = 1;
goto cleanup;
}
if (!line[0] || (line[0] == '/' && line[1] == '/'))
continue;
printf(" src: %s\n", line);
- if (!parser_compile(line)) {
+ if (!parser_compile_file(line)) {
retval = 1;
goto srcdone;
}
return true;
}
-bool parser_compile(const char *filename)
+bool parser_compile()
{
- parser->lex = lex_open(filename);
- if (!parser->lex) {
- printf("failed to open file \"%s\"\n", filename);
- return false;
- }
-
/* initial lexer/parser state */
parser->lex->flags.noops = true;
return !parser->errors;
}
+bool parser_compile_file(const char *filename)
+{
+ parser->lex = lex_open(filename);
+ if (!parser->lex) {
+ printf("failed to open file \"%s\"\n", filename);
+ return false;
+ }
+ return parser_compile();
+}
+
+bool parser_compile_string(const char *name, const char *str)
+{
+ parser->lex = lex_open_string(str, strlen(str), name);
+ if (!parser->lex) {
+ printf("failed to create lexer for string \"%s\"\n", name);
+ return false;
+ }
+ return parser_compile();
+}
+
void parser_cleanup()
{
size_t i;