* Implementation of GiNaC's parser. */
/*
- * GiNaC Copyright (C) 1999-2009 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2016 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
*/
#include "parser.h"
+#include "lst.h"
#include "lexer.h"
#include "debug.h"
#include "mul.h"
#include "constant.h"
#include "function.h"
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_STDINT_H
-#include <stdint.h> // for uintptr_t
-#endif
+#include <cstdint> // for uintptr_t
#include <sstream>
#include <stdexcept>
return e;
}
-extern numeric* _num_1_p;
-extern ex _ex0;
+/// lst_expr: '{' expression { ',' expression } '}'
+ex parser::parse_lst_expr()
+{
+ get_next_tok(); // eat {.
+
+ lst list;
+ if (token != '}') {
+ while (true) {
+ ex e = parse_expression(); // expression();
+ list.append(e);
+
+ if (token == '}') {
+ break;
+ }
+
+ if (token != ',') {
+ Parse_error("expected '}'");
+ }
+
+ get_next_tok(); // eat ','.
+ }
+ }
+ // Eat the '}'.
+ get_next_tok();
+
+ return list;
+}
+
+extern const ex _ex0;
/// unary_expr: [+-] expression
ex parser::parse_unary_expr()
return parse_number_expr();
case '(':
return parse_paren_expr();
+ case '{':
+ return parse_lst_expr();
case '-':
case '+':
return parse_unary_expr();