diff --git a/lib/modules/LR.pmod/Grammar_parser.pmod b/lib/modules/LR.pmod/Grammar_parser.pmod index 1710448fc7b51c6fc1717a0cac0fd08a3a86d707..69311fa79c8413d170ffa250f9a06a0e06a1cfd2 100755 --- a/lib/modules/LR.pmod/Grammar_parser.pmod +++ b/lib/modules/LR.pmod/Grammar_parser.pmod @@ -1,7 +1,7 @@ #!/home/grubba/src/pike/build/sol2.5/pike /* - * $Id: Grammar_parser.pmod,v 1.1 1997/03/03 23:50:14 grubba Exp $ + * $Id: Grammar_parser.pmod,v 1.2 1997/03/28 14:42:43 grubba Exp $ * * Generates a parser from a textual specification. * @@ -151,7 +151,7 @@ private object(Stack.stack) id_stack = Stack.stack(); private mapping(string:int) nonterminal_lookup = ([]); -private object(parser) g=parser(); +private object(parser) g; private object master; @@ -328,6 +328,17 @@ object(parser) make_parser(string str, object|void m) return (res); } +int|object(parser) make_parser_from_file(string f, object|void m) +{ + object(files.file) f = files.file(); + int|object(parser) g = 0; + if (f->open(argv[i], "r")) { + g = make_parser(f->read(0x7fffffff), m); + f->close(); + } + return(g); +} + /* * Syntax-checks and compiles the grammar files */ @@ -339,12 +350,10 @@ int main(int argc, string *argv) int i; for (i=1; i < argc; i++) { - object(FILE) f = FILE(); - object(parser) g; - f->open(argv[i], "r"); werror(sprintf("Compiling \"%s\"...\n", argv[i])); - g = make_parser(f->read(0x7fffffff)); - if (error) { + + int|object(parser) g = make_parser_from_file(argv[i]); + if (error || !g) { werror("Compilation failed\n"); } else { werror("Compilation done\n");