X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=ginac%2Fparser%2Fparser.cpp;h=de6b269ac1ac934209d16989e2d836b431e0db8d;hb=99901bd5c74203caece07e3e2948780887a0e822;hp=992b151079c60aee8daaf6a632c4cbff1f5486a3;hpb=265e5f9537e128887655119fc4cc8d3a46f3dcff;p=ginac.git diff --git a/ginac/parser/parser.cpp b/ginac/parser/parser.cpp index 992b1510..de6b269a 100644 --- a/ginac/parser/parser.cpp +++ b/ginac/parser/parser.cpp @@ -120,6 +120,34 @@ ex parser::parse_paren_expr() return e; } +/// 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 @@ -151,6 +179,8 @@ ex parser::parse_primary() return parse_number_expr(); case '(': return parse_paren_expr(); + case '{': + return parse_lst_expr(); case '-': case '+': return parse_unary_expr();