* This file must be processed with yacc/bison. */
/*
- * GiNaC Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#define YYERROR_VERBOSE 1
-#define yylex ginac_yylex
-#define yyerror ginac_yyerror
-
// Parsed output expression
ex parsed_ex;
// Last error message returned by parser
-static string parser_error;
+static std::string parser_error;
%}
/* Tokens (T_LITERAL means a literal value returned by the parser, but not
try {
parsed_ex = $1;
YYACCEPT;
- } catch (exception &e) {
- parser_error = e.what();
+ } catch (std::exception &err) {
+ parser_error = err.what();
YYERROR;
}
}
;
exp : T_NUMBER {$$ = $1;}
- | T_SYMBOL {$$ = $1.eval();}
+ | T_SYMBOL {
+ if (is_lexer_symbol_predefined($1))
+ $$ = $1.eval();
+ else
+ throw (std::runtime_error("unknown symbol '" + ex_to_symbol($1).getname() + "'"));
+ }
| T_LITERAL {$$ = $1;}
| T_DIGITS {$$ = $1;}
| T_SYMBOL '(' exprseq ')' {
%%
// Get last error encountered by parser
-string get_parser_error(void)
+std::string get_parser_error(void)
{
return parser_error;
}
// Error print routine (store error string in parser_error)
int ginac_yyerror(char *s)
{
- parser_error = string(s) + " at " + string(ginac_yytext);
+ parser_error = std::string(s) + " at " + std::string(ginac_yytext);
+ return 0;
}