On Mon, 11 Aug 2008, kogorman wrote: > > All this is true, but beside the point. What's missing is yyerrok, not > yyerror.
This is what you wrote: > >> But my C++ parser > >> won't compile because (it says) yyerror was not declared in this context. > I've got the required yyerror and yylex. I found this in the file of C++ code generated by Bison: #define yyerrok (yyerrstatus = 0) Are you perhaps typing `yyerrorok' instead of `yyerrok'? > > I'm using a C++ setup because I don't want to mix FILE* and C++ streams, > and just because it seems the Right Thing To Do (TM). Of course, you can avoid using objects of type `FILE' and pointers to them if you want, but I don't see any reason why one shouldn't use them and C++ streams in the same program and/or compilation units. `popen', for example, returns a `FILE*' and I don't know of any function from the C++ STL that does the same thing and returns a stream object instead. One might even have a reason to use file descriptors. Generating C++ parser or generating a C parser that contains C++ code is just a matter of taste, not a question of right or wrong. Laurence > > Laurence Finston wrote: > > > >> The C examples show using yyerror and the examples compile and run okay. > >> But my C++ parser > >> won't compile because (it says) yyerror was not declared in this context. > >> And when I look at > >> the generated code, the #define I see in the C scanners is missing. This > >> is > >> a nuisance; is there > >> anything I can do to make it (or the appropriate C++ analogue) appear? > >> > > > > I usually use C++ in the actions of my parsers, but I never generate a C++ > > parser, so there may be some difference that you'll have to account for. > > > > When generating a C parser, one has to declare `yyerror', `yylex' and > > possibly `yywrap' in the first section of the parser input file. They may > > be defined somewhere else. `yylex', of course, can be generated by Flex > > or lex, and I believe there's an option for having at least one of the > > others generated automatically by Flex and possibly by Bison. One has to > > make sure that the declaration matches the function, which can be slightly > > tricky, if you're passing a parameter to `yyparse' and `yylex' and > > generating reentrant versions of these functions. > > > > Here's an example: > > > > int > > yylex(YYSTYPE* lvalp, yyscan_t parameter); > > > > int > > yywrap(void); > > > > int > > yyerror(void* v, char const* s); > > > > For what it's worth, I don't see any particular advantage in generating a > > C++ parser instead of a C parser, but that's just my opinion and I haven't > > kept up with developments with respect to this feature. > > > > Laurence Finston > > > > On Sun, 10 Aug 2008, kogorman wrote: > > > >> > >> I'm developing a very simple parser to frontend to an existing C++ board > >> game > >> (named "six"). > >> > >> I'm following the examples as best I can, but my attempts at syntax error > >> handling are failing. > >> > >> The C examples show using yyerror and the examples compile and run okay. > >> But my C++ parser > >> won't compile because (it says) yyerror was not declared in this context. > >> And when I look at > >> the generated code, the #define I see in the C scanners is missing. This > >> is > >> a nuisance; is there > >> anything I can do to make it (or the appropriate C++ analogue) appear? > >> > >> For reference, the starting point for this project was the C++ example > >> from > >> the Bison docs, and > >> the error processing from the multifunction calculator C example from the > >> same docs. > >> > >> Here's the scanner spec: > >> http://www.nabble.com/file/p18919947/sixcl-parser.yy sixcl-parser.yy > >> > >> > >> -- > >> View this message in context: > >> http://www.nabble.com/yyerrok-is-missing-in-C%2B%2B-parser-tp18919947p18919947.html > >> Sent from the Gnu - Bison - Help mailing list archive at Nabble.com. > >> > >> > >> > >> _______________________________________________ > >> help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison > >> > > > > > > _______________________________________________ > > help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison > > > > > > -- > View this message in context: > http://www.nabble.com/yyerrok-is-missing-in-C%2B%2B-parser-tp18919947p18922339.html > Sent from the Gnu - Bison - Help mailing list archive at Nabble.com. > > > > _______________________________________________ > help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison > _______________________________________________ help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison