diff options
Diffstat (limited to 'gdb/f-exp.y')
-rw-r--r-- | gdb/f-exp.y | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gdb/f-exp.y b/gdb/f-exp.y index a066c5a..0deb816 100644 --- a/gdb/f-exp.y +++ b/gdb/f-exp.y @@ -1,6 +1,6 @@ /* YACC parser for Fortran expressions, for GDB. - Copyright 1986, 1989, 1990, 1991, 1993, 1994, 1995, 1996, 2000, 2001 - Free Software Foundation, Inc. + Copyright 1986, 1989, 1990, 1991, 1993, 1994, 1995, 1996, 2000, 2001, + 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Motorola. Adapted from the C parser by Farooq Butt (fmbutt@engage.sps.mot.com). @@ -217,6 +217,7 @@ static int parse_number (char *, int, int, YYSTYPE *); %left '@' %left '+' '-' %left '*' '/' '%' +%right STARSTAR %right UNARY %right '(' @@ -315,6 +316,10 @@ exp : exp '@' exp { write_exp_elt_opcode (BINOP_REPEAT); } ; +exp : exp STARSTAR exp + { write_exp_elt_opcode (BINOP_EXP); } + ; + exp : exp '*' exp { write_exp_elt_opcode (BINOP_MUL); } ; @@ -941,7 +946,7 @@ yylex () } } - /* See if it is a special .foo. operator */ + /* See if it is a special .foo. operator. */ for (i = 0; dot_ops[i].operator != NULL; i++) if (strncmp (tokstart, dot_ops[i].operator, strlen (dot_ops[i].operator)) == 0) @@ -951,6 +956,15 @@ yylex () return dot_ops[i].token; } + /* See if it is an exponentiation operator. */ + + if (strncmp (tokstart, "**", 2) == 0) + { + lexptr += 2; + yylval.opcode = BINOP_EXP; + return STARSTAR; + } + switch (c = *tokstart) { case 0: |