1 /* YACC grammar for Chill expressions, for GDB.
2 Copyright 1992, 1993, 1994 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20 /* Parse a Chill expression from text in a string,
21 and return the result as a struct expression pointer.
22 That structure contains arithmetic operations in reverse polish,
23 with constants represented by operations that are followed by special data.
24 See expression.h for the details of the format.
25 What is important here is that it can be built up sequentially
26 during the process of parsing; the lower levels of the tree always
27 come first in the result.
29 Note that malloc's and realloc's in this file are transformed to
30 xmalloc and xrealloc respectively by the same sed command in the
31 makefile that remaps any other malloc/realloc inserted by the parser
32 generator. Doing this with #defines and trying to control the interaction
33 with include files (<malloc.h> and <stdlib.h> for example) just became
34 too messy, particularly when such includes can be inserted at random
35 times by the parser generator.
37 Also note that the language accepted by this parser is more liberal
38 than the one accepted by an actual Chill compiler. For example, the
39 language rule that a simple name string can not be one of the reserved
40 simple name strings is not enforced (e.g "case" is not treated as a
41 reserved name). Another example is that Chill is a strongly typed
42 language, and certain expressions that violate the type constraints
43 may still be evaluated if gdb can do so in a meaningful manner, while
44 such expressions would be rejected by the compiler. The reason for
45 this more liberal behavior is the philosophy that the debugger
46 is intended to be a tool that is used by the programmer when things
47 go wrong, and as such, it should provide as few artificial barriers
48 to it's use as possible. If it can do something meaningful, even
49 something that violates language contraints that are enforced by the
50 compiler, it should do so without complaint.
59 #include "expression.h"
62 #include "parser-defs.h"
64 #include "bfd.h" /* Required by objfiles.h. */
65 #include "symfile.h" /* Required by objfiles.h. */
66 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
68 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
69 as well as gratuitiously global symbol names, so we can have multiple
70 yacc generated parsers in gdb. Note that these are only the variables
71 produced by yacc. If other parser generators (bison, byacc, etc) produce
72 additional global names that conflict at link time, then those parser
73 generators need to be fixed instead of adding those names to this list. */
75 #define yymaxdepth chill_maxdepth
76 #define yyparse chill_parse
77 #define yylex chill_lex
78 #define yyerror chill_error
79 #define yylval chill_lval
80 #define yychar chill_char
81 #define yydebug chill_debug
82 #define yypact chill_pact
85 #define yydef chill_def
86 #define yychk chill_chk
87 #define yypgo chill_pgo
88 #define yyact chill_act
89 #define yyexca chill_exca
90 #define yyerrflag chill_errflag
91 #define yynerrs chill_nerrs
95 #define yy_yys chill_yys
96 #define yystate chill_state
97 #define yytmp chill_tmp
99 #define yy_yyv chill_yyv
100 #define yyval chill_val
101 #define yylloc chill_lloc
102 #define yyreds chill_reds /* With YYDEBUG defined */
103 #define yytoks chill_toks /* With YYDEBUG defined */
104 #define yylhs chill_yylhs
105 #define yylen chill_yylen
106 #define yydefred chill_yydefred
107 #define yydgoto chill_yydgoto
108 #define yysindex chill_yysindex
109 #define yyrindex chill_yyrindex
110 #define yygindex chill_yygindex
111 #define yytable chill_yytable
112 #define yycheck chill_yycheck
115 #define YYDEBUG 0 /* Default to no yydebug support */
119 yyparse PARAMS ((void));
122 yylex PARAMS ((void));
125 yyerror PARAMS ((char *));
129 /* Although the yacc "value" of an expression is not used,
130 since the result is stored in the structure being created,
131 other node types do have values. */
136 unsigned LONGEST ulval;
146 struct symtoken ssym;
149 enum exp_opcode opcode;
150 struct internalvar *ivar;
156 %token <voidval> FIXME_01
157 %token <voidval> FIXME_02
158 %token <voidval> FIXME_03
159 %token <voidval> FIXME_04
160 %token <voidval> FIXME_05
161 %token <voidval> FIXME_06
162 %token <voidval> FIXME_07
163 %token <voidval> FIXME_08
164 %token <voidval> FIXME_09
165 %token <voidval> FIXME_10
166 %token <voidval> FIXME_11
167 %token <voidval> FIXME_12
168 %token <voidval> FIXME_13
169 %token <voidval> FIXME_14
170 %token <voidval> FIXME_15
171 %token <voidval> FIXME_16
172 %token <voidval> FIXME_17
173 %token <voidval> FIXME_18
174 %token <voidval> FIXME_19
175 %token <voidval> FIXME_20
176 %token <voidval> FIXME_21
177 %token <voidval> FIXME_22
178 %token <voidval> FIXME_24
179 %token <voidval> FIXME_25
180 %token <voidval> FIXME_26
181 %token <voidval> FIXME_27
182 %token <voidval> FIXME_28
183 %token <voidval> FIXME_29
184 %token <voidval> FIXME_30
186 %token <typed_val> INTEGER_LITERAL
187 %token <ulval> BOOLEAN_LITERAL
188 %token <typed_val> CHARACTER_LITERAL
189 %token <dval> FLOAT_LITERAL
190 %token <ssym> GENERAL_PROCEDURE_NAME
191 %token <ssym> LOCATION_NAME
192 %token <voidval> SET_LITERAL
193 %token <voidval> EMPTINESS_LITERAL
194 %token <sval> CHARACTER_STRING_LITERAL
195 %token <sval> BIT_STRING_LITERAL
196 %token <tsym> TYPENAME
197 %token <sval> FIELD_NAME
202 %token <voidval> CASE
204 %token <voidval> ESAC
205 %token <voidval> LOGIOR
206 %token <voidval> ORIF
207 %token <voidval> LOGXOR
208 %token <voidval> LOGAND
209 %token <voidval> ANDIF
211 %token <voidval> NOTEQUAL
221 %token <voidval> SLASH_SLASH
225 %token <voidval> POINTER
226 %token <voidval> RECEIVE
233 %token <voidval> THEN
234 %token <voidval> ELSE
236 %token <voidval> ELSIF
237 %token <voidval> ILLEGAL_TOKEN
239 %token <voidval> PRED
240 %token <voidval> SUCC
242 %token <voidval> CARD
243 %token <voidval> MAX_TOKEN
244 %token <voidval> MIN_TOKEN
245 %token <voidval> SIZE
246 %token <voidval> UPPER
247 %token <voidval> LOWER
248 %token <voidval> LENGTH
249 %token <voidval> ARRAY
251 /* Tokens which are not Chill tokens used in expressions, but rather GDB
252 specific things that we recognize in the same context as Chill tokens
253 (register names for example). */
255 %token <lval> GDB_REGNAME /* Machine register name */
256 %token <lval> GDB_LAST /* Value history */
257 %token <ivar> GDB_VARIABLE /* Convenience variable */
258 %token <voidval> GDB_ASSIGNMENT /* Assign value to somewhere */
260 %type <voidval> access_name
261 %type <voidval> primitive_value
262 %type <voidval> value_name
263 %type <voidval> literal
264 %type <voidval> tuple
265 %type <voidval> slice
266 %type <voidval> expression_conversion
267 %type <voidval> value_procedure_call
268 %type <voidval> value_built_in_routine_call
269 %type <voidval> chill_value_built_in_routine_call
270 %type <voidval> start_expression
271 %type <voidval> zero_adic_operator
272 %type <voidval> parenthesised_expression
273 %type <voidval> value
274 %type <voidval> undefined_value
275 %type <voidval> expression
276 %type <voidval> conditional_expression
277 %type <voidval> then_alternative
278 %type <voidval> else_alternative
279 %type <voidval> sub_expression
280 %type <voidval> value_case_alternative
281 %type <voidval> operand_0
282 %type <voidval> operand_1
283 %type <voidval> operand_2
284 %type <voidval> operand_3
285 %type <voidval> operand_4
286 %type <voidval> operand_5
287 %type <voidval> operand_6
288 %type <voidval> synonym_name
289 %type <voidval> value_enumeration_name
290 %type <voidval> value_do_with_name
291 %type <voidval> value_receive_name
292 %type <voidval> expression_list
293 %type <tval> mode_argument
294 %type <voidval> upper_lower_argument
295 %type <voidval> length_argument
296 %type <voidval> array_mode_name
297 %type <voidval> string_mode_name
298 %type <voidval> variant_structure_mode_name
299 %type <voidval> boolean_expression
300 %type <voidval> case_selector_list
301 %type <voidval> subexpression
302 %type <voidval> case_label_specification
303 %type <voidval> buffer_location
304 %type <voidval> single_assignment_action
305 %type <tsym> mode_name
314 { write_exp_elt_opcode(OP_TYPE);
315 write_exp_elt_type($1.type);
316 write_exp_elt_opcode(OP_TYPE);}
329 undefined_value : FIXME_01
337 access_name : LOCATION_NAME
339 write_exp_elt_opcode (OP_VAR_VALUE);
340 write_exp_elt_block (NULL);
341 write_exp_elt_sym ($1.sym);
342 write_exp_elt_opcode (OP_VAR_VALUE);
344 | GDB_LAST /* gdb specific */
346 write_exp_elt_opcode (OP_LAST);
347 write_exp_elt_longcst ($1);
348 write_exp_elt_opcode (OP_LAST);
350 | GDB_REGNAME /* gdb specific */
352 write_exp_elt_opcode (OP_REGISTER);
353 write_exp_elt_longcst ($1);
354 write_exp_elt_opcode (OP_REGISTER);
356 | GDB_VARIABLE /* gdb specific */
358 write_exp_elt_opcode (OP_INTERNALVAR);
359 write_exp_elt_intern ($1);
360 write_exp_elt_opcode (OP_INTERNALVAR);
370 expression_list : expression
374 | expression_list ',' expression
380 maybe_expression_list: /* EMPTY */
390 primitive_value_lparen: primitive_value '('
391 /* This is to save the value of arglist_len
392 being accumulated for each dimension. */
393 { start_arglist (); }
397 { $$ = end_arglist (); }
402 | primitive_value_lparen maybe_expression_list rparen
404 write_exp_elt_opcode (MULTI_SUBSCRIPT);
405 write_exp_elt_longcst ($3);
406 write_exp_elt_opcode (MULTI_SUBSCRIPT);
408 | primitive_value FIELD_NAME
409 { write_exp_elt_opcode (STRUCTOP_STRUCT);
410 write_exp_string ($2);
411 write_exp_elt_opcode (STRUCTOP_STRUCT);
413 | primitive_value POINTER
415 write_exp_elt_opcode (UNOP_IND);
433 | expression_conversion
437 | value_procedure_call
441 | value_built_in_routine_call
453 | parenthesised_expression
461 value_name : synonym_name
465 | value_enumeration_name
477 | GENERAL_PROCEDURE_NAME
479 write_exp_elt_opcode (OP_VAR_VALUE);
480 write_exp_elt_block (NULL);
481 write_exp_elt_sym ($1.sym);
482 write_exp_elt_opcode (OP_VAR_VALUE);
488 literal : INTEGER_LITERAL
490 write_exp_elt_opcode (OP_LONG);
491 write_exp_elt_type ($1.type);
492 write_exp_elt_longcst ((LONGEST) ($1.val));
493 write_exp_elt_opcode (OP_LONG);
497 write_exp_elt_opcode (OP_BOOL);
498 write_exp_elt_longcst ((LONGEST) $1);
499 write_exp_elt_opcode (OP_BOOL);
503 write_exp_elt_opcode (OP_LONG);
504 write_exp_elt_type ($1.type);
505 write_exp_elt_longcst ((LONGEST) ($1.val));
506 write_exp_elt_opcode (OP_LONG);
510 write_exp_elt_opcode (OP_DOUBLE);
511 write_exp_elt_type (builtin_type_double);
512 write_exp_elt_dblcst ($1);
513 write_exp_elt_opcode (OP_DOUBLE);
521 struct type *void_ptr_type
522 = lookup_pointer_type (builtin_type_void);
523 write_exp_elt_opcode (OP_LONG);
524 write_exp_elt_type (void_ptr_type);
525 write_exp_elt_longcst (0);
526 write_exp_elt_opcode (OP_LONG);
528 | CHARACTER_STRING_LITERAL
530 write_exp_elt_opcode (OP_STRING);
531 write_exp_string ($1);
532 write_exp_elt_opcode (OP_STRING);
536 write_exp_elt_opcode (OP_BITSTRING);
537 write_exp_bitstring ($1);
538 write_exp_elt_opcode (OP_BITSTRING);
544 tuple_element : expression
545 | named_record_element
548 named_record_element: FIELD_NAME ',' named_record_element
549 { write_exp_elt_opcode (OP_LABELED);
550 write_exp_string ($1);
551 write_exp_elt_opcode (OP_LABELED);
553 | FIELD_NAME ':' expression
554 { write_exp_elt_opcode (OP_LABELED);
555 write_exp_string ($1);
556 write_exp_elt_opcode (OP_LABELED);
560 tuple_elements : tuple_element
564 | tuple_elements ',' tuple_element
570 maybe_tuple_elements : tuple_elements
575 { start_arglist (); }
576 maybe_tuple_elements ']'
578 write_exp_elt_opcode (OP_ARRAY);
579 write_exp_elt_longcst ((LONGEST) 0);
580 write_exp_elt_longcst ((LONGEST) end_arglist () - 1);
581 write_exp_elt_opcode (OP_ARRAY);
585 { start_arglist (); }
586 maybe_tuple_elements ']'
588 write_exp_elt_opcode (OP_ARRAY);
589 write_exp_elt_longcst ((LONGEST) 0);
590 write_exp_elt_longcst ((LONGEST) end_arglist () - 1);
591 write_exp_elt_opcode (OP_ARRAY);
593 write_exp_elt_opcode (UNOP_CAST);
594 write_exp_elt_type ($1.type);
595 write_exp_elt_opcode (UNOP_CAST);
603 slice: primitive_value_lparen expression ':' expression rparen
605 write_exp_elt_opcode (TERNOP_SLICE);
607 | primitive_value_lparen expression UP expression rparen
609 write_exp_elt_opcode (TERNOP_SLICE_COUNT);
615 expression_conversion: mode_name parenthesised_expression
617 write_exp_elt_opcode (UNOP_CAST);
618 write_exp_elt_type ($1.type);
619 write_exp_elt_opcode (UNOP_CAST);
621 | ARRAY '(' ')' mode_name parenthesised_expression
622 /* This is pseudo-Chill, similar to C's '(TYPE[])EXPR'
623 which casts to an artificial array. */
625 struct type *range_type
626 = create_range_type ((struct type *) NULL,
627 builtin_type_int, 0, 0);
628 struct type *array_type
629 = create_array_type ((struct type *) NULL,
630 $4.type, range_type);
631 TYPE_ARRAY_UPPER_BOUND_TYPE(array_type)
632 = BOUND_CANNOT_BE_DETERMINED;
633 write_exp_elt_opcode (UNOP_CAST);
634 write_exp_elt_type (array_type);
635 write_exp_elt_opcode (UNOP_CAST);
641 value_procedure_call: FIXME_05
649 value_built_in_routine_call: chill_value_built_in_routine_call
657 start_expression: FIXME_06
660 } /* Not in GNU-Chill */
665 zero_adic_operator: FIXME_07
673 parenthesised_expression: '(' expression ')'
681 expression : operand_0
685 | single_assignment_action
689 | conditional_expression
695 conditional_expression : IF boolean_expression then_alternative else_alternative FI
699 | CASE case_selector_list OF value_case_alternative ELSE sub_expression ESAC
705 then_alternative: THEN subexpression
711 else_alternative: ELSE subexpression
715 | ELSIF boolean_expression then_alternative else_alternative
721 sub_expression : expression
727 value_case_alternative: case_label_specification ':' sub_expression ';'
735 operand_0 : operand_1
739 | operand_0 LOGIOR operand_1
741 write_exp_elt_opcode (BINOP_BITWISE_IOR);
743 | operand_0 ORIF operand_1
747 | operand_0 LOGXOR operand_1
749 write_exp_elt_opcode (BINOP_BITWISE_XOR);
755 operand_1 : operand_2
759 | operand_1 LOGAND operand_2
761 write_exp_elt_opcode (BINOP_BITWISE_AND);
763 | operand_1 ANDIF operand_2
771 operand_2 : operand_3
775 | operand_2 '=' operand_3
777 write_exp_elt_opcode (BINOP_EQUAL);
779 | operand_2 NOTEQUAL operand_3
781 write_exp_elt_opcode (BINOP_NOTEQUAL);
783 | operand_2 '>' operand_3
785 write_exp_elt_opcode (BINOP_GTR);
787 | operand_2 GTR operand_3
789 write_exp_elt_opcode (BINOP_GEQ);
791 | operand_2 '<' operand_3
793 write_exp_elt_opcode (BINOP_LESS);
795 | operand_2 LEQ operand_3
797 write_exp_elt_opcode (BINOP_LEQ);
799 | operand_2 IN operand_3
801 write_exp_elt_opcode (BINOP_IN);
808 operand_3 : operand_4
812 | operand_3 '+' operand_4
814 write_exp_elt_opcode (BINOP_ADD);
816 | operand_3 '-' operand_4
818 write_exp_elt_opcode (BINOP_SUB);
820 | operand_3 SLASH_SLASH operand_4
822 write_exp_elt_opcode (BINOP_CONCAT);
828 operand_4 : operand_5
832 | operand_4 '*' operand_5
834 write_exp_elt_opcode (BINOP_MUL);
836 | operand_4 '/' operand_5
838 write_exp_elt_opcode (BINOP_DIV);
840 | operand_4 MOD operand_5
842 write_exp_elt_opcode (BINOP_MOD);
844 | operand_4 REM operand_5
846 write_exp_elt_opcode (BINOP_REM);
852 operand_5 : operand_6
858 write_exp_elt_opcode (UNOP_NEG);
862 write_exp_elt_opcode (UNOP_LOGICAL_NOT);
864 | parenthesised_expression literal
865 /* We require the string operand to be a literal, to avoid some
866 nasty parsing ambiguities. */
868 write_exp_elt_opcode (BINOP_CONCAT);
874 operand_6 : POINTER primitive_value
876 write_exp_elt_opcode (UNOP_ADDR);
878 | RECEIVE buffer_location
891 single_assignment_action :
892 primitive_value GDB_ASSIGNMENT value
894 write_exp_elt_opcode (BINOP_ASSIGN);
900 chill_value_built_in_routine_call :
901 NUM '(' expression ')'
905 | PRED '(' expression ')'
909 | SUCC '(' expression ')'
913 | ABS '(' expression ')'
917 | CARD '(' expression ')'
921 | MAX_TOKEN '(' expression ')'
925 | MIN_TOKEN '(' expression ')'
929 | SIZE '(' expression ')'
930 { write_exp_elt_opcode (UNOP_SIZEOF); }
931 | SIZE '(' mode_argument ')'
932 { write_exp_elt_opcode (OP_LONG);
933 write_exp_elt_type (builtin_type_int);
934 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
935 write_exp_elt_opcode (OP_LONG); }
936 | UPPER '(' upper_lower_argument ')'
940 | LOWER '(' upper_lower_argument ')'
944 | LENGTH '(' length_argument ')'
950 mode_argument : mode_name
954 | array_mode_name '(' expression ')'
958 | string_mode_name '(' expression ')'
962 | variant_structure_mode_name '(' expression_list ')'
971 upper_lower_argument : expression
981 length_argument : expression
987 /* Things which still need productions... */
989 array_mode_name : FIXME_08 { $$ = 0; }
990 string_mode_name : FIXME_09 { $$ = 0; }
991 variant_structure_mode_name: FIXME_10 { $$ = 0; }
992 synonym_name : FIXME_11 { $$ = 0; }
993 value_enumeration_name : FIXME_12 { $$ = 0; }
994 value_do_with_name : FIXME_13 { $$ = 0; }
995 value_receive_name : FIXME_14 { $$ = 0; }
996 boolean_expression : FIXME_26 { $$ = 0; }
997 case_selector_list : FIXME_27 { $$ = 0; }
998 subexpression : FIXME_28 { $$ = 0; }
999 case_label_specification: FIXME_29 { $$ = 0; }
1000 buffer_location : FIXME_30 { $$ = 0; }
1004 /* Implementation of a dynamically expandable buffer for processing input
1005 characters acquired through lexptr and building a value to return in
1008 static char *tempbuf; /* Current buffer contents */
1009 static int tempbufsize; /* Size of allocated buffer */
1010 static int tempbufindex; /* Current index into buffer */
1012 #define GROWBY_MIN_SIZE 64 /* Minimum amount to grow buffer by */
1014 #define CHECKBUF(size) \
1016 if (tempbufindex + (size) >= tempbufsize) \
1018 growbuf_by_size (size); \
1022 /* Grow the static temp buffer if necessary, including allocating the first one
1026 growbuf_by_size (count)
1031 growby = max (count, GROWBY_MIN_SIZE);
1032 tempbufsize += growby;
1033 if (tempbuf == NULL)
1035 tempbuf = (char *) malloc (tempbufsize);
1039 tempbuf = (char *) realloc (tempbuf, tempbufsize);
1043 /* Try to consume a simple name string token. If successful, returns
1044 a pointer to a nullbyte terminated copy of the name that can be used
1045 in symbol table lookups. If not successful, returns NULL. */
1048 match_simple_name_string ()
1050 char *tokptr = lexptr;
1052 if (isalpha (*tokptr) || *tokptr == '_')
1057 } while (isalnum (*tokptr) || (*tokptr == '_'));
1058 yylval.sval.ptr = lexptr;
1059 yylval.sval.length = tokptr - lexptr;
1061 result = copy_name (yylval.sval);
1067 /* Start looking for a value composed of valid digits as set by the base
1068 in use. Note that '_' characters are valid anywhere, in any quantity,
1069 and are simply ignored. Since we must find at least one valid digit,
1070 or reject this token as an integer literal, we keep track of how many
1071 digits we have encountered. */
1074 decode_integer_value (base, tokptrptr, ivalptr)
1079 char *tokptr = *tokptrptr;
1083 while (*tokptr != '\0')
1087 temp = tolower (temp);
1093 case '0': case '1': case '2': case '3': case '4':
1094 case '5': case '6': case '7': case '8': case '9':
1097 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
1113 /* Found something not in domain for current base. */
1114 tokptr--; /* Unconsume what gave us indigestion. */
1119 /* If we didn't find any digits, then we don't have a valid integer
1120 value, so reject the entire token. Otherwise, update the lexical
1121 scan pointer, and return non-zero for success. */
1129 *tokptrptr = tokptr;
1135 decode_integer_literal (valptr, tokptrptr)
1139 char *tokptr = *tokptrptr;
1142 int explicit_base = 0;
1144 /* Look for an explicit base specifier, which is optional. */
1177 /* If we found an explicit base ensure that the character after the
1178 explicit base is a single quote. */
1180 if (explicit_base && (*tokptr++ != '\''))
1185 /* Attempt to decode whatever follows as an integer value in the
1186 indicated base, updating the token pointer in the process and
1187 computing the value into ival. Also, if we have an explicit
1188 base, then the next character must not be a single quote, or we
1189 have a bitstring literal, so reject the entire token in this case.
1190 Otherwise, update the lexical scan pointer, and return non-zero
1193 if (!decode_integer_value (base, &tokptr, &ival))
1197 else if (explicit_base && (*tokptr == '\''))
1204 *tokptrptr = tokptr;
1209 /* If it wasn't for the fact that floating point values can contain '_'
1210 characters, we could just let strtod do all the hard work by letting it
1211 try to consume as much of the current token buffer as possible and
1212 find a legal conversion. Unfortunately we need to filter out the '_'
1213 characters before calling strtod, which we do by copying the other
1214 legal chars to a local buffer to be converted. However since we also
1215 need to keep track of where the last unconsumed character in the input
1216 buffer is, we have transfer only as many characters as may compose a
1217 legal floating point value. */
1220 match_float_literal ()
1222 char *tokptr = lexptr;
1226 extern double strtod ();
1228 /* Make local buffer in which to build the string to convert. This is
1229 required because underscores are valid in chill floating point numbers
1230 but not in the string passed to strtod to convert. The string will be
1231 no longer than our input string. */
1233 copy = buf = (char *) alloca (strlen (tokptr) + 1);
1235 /* Transfer all leading digits to the conversion buffer, discarding any
1238 while (isdigit (*tokptr) || *tokptr == '_')
1247 /* Now accept either a '.', or one of [eEdD]. Dot is legal regardless
1248 of whether we found any leading digits, and we simply accept it and
1249 continue on to look for the fractional part and/or exponent. One of
1250 [eEdD] is legal only if we have seen digits, and means that there
1251 is no fractional part. If we find neither of these, then this is
1252 not a floating point number, so return failure. */
1257 /* Accept and then look for fractional part and/or exponent. */
1270 goto collect_exponent;
1278 /* We found a '.', copy any fractional digits to the conversion buffer, up
1279 to the first nondigit, non-underscore character. */
1281 while (isdigit (*tokptr) || *tokptr == '_')
1290 /* Look for an exponent, which must start with one of [eEdD]. If none
1291 is found, jump directly to trying to convert what we have collected
1308 /* Accept an optional '-' or '+' following one of [eEdD]. */
1311 if (*tokptr == '+' || *tokptr == '-')
1313 *copy++ = *tokptr++;
1316 /* Now copy an exponent into the conversion buffer. Note that at the
1317 moment underscores are *not* allowed in exponents. */
1319 while (isdigit (*tokptr))
1321 *copy++ = *tokptr++;
1324 /* If we transfered any chars to the conversion buffer, try to interpret its
1325 contents as a floating point value. If any characters remain, then we
1326 must not have a valid floating point string. */
1332 dval = strtod (buf, ©);
1337 return (FLOAT_LITERAL);
1343 /* Recognize a string literal. A string literal is a sequence
1344 of characters enclosed in matching single or double quotes, except that
1345 a single character inside single quotes is a character literal, which
1346 we reject as a string literal. To embed the terminator character inside
1347 a string, it is simply doubled (I.E. "this""is""one""string") */
1350 match_string_literal ()
1352 char *tokptr = lexptr;
1354 for (tempbufindex = 0, tokptr++; *tokptr != '\0'; tokptr++)
1357 if (*tokptr == *lexptr)
1359 if (*(tokptr + 1) == *lexptr)
1368 tempbuf[tempbufindex++] = *tokptr;
1370 if (*tokptr == '\0' /* no terminator */
1371 || (tempbufindex == 1 && *tokptr == '\'')) /* char literal */
1377 tempbuf[tempbufindex] = '\0';
1378 yylval.sval.ptr = tempbuf;
1379 yylval.sval.length = tempbufindex;
1381 return (CHARACTER_STRING_LITERAL);
1385 /* Recognize a character literal. A character literal is single character
1386 or a control sequence, enclosed in single quotes. A control sequence
1387 is a comma separated list of one or more integer literals, enclosed
1388 in parenthesis and introduced with a circumflex character.
1390 EX: 'a' '^(7)' '^(7,8)'
1392 As a GNU chill extension, the syntax C'xx' is also recognized as a
1393 character literal, where xx is a hex value for the character.
1395 Note that more than a single character, enclosed in single quotes, is
1398 Also note that the control sequence form is not in GNU Chill since it
1399 is ambiguous with the string literal form using single quotes. I.E.
1400 is '^(7)' a character literal or a string literal. In theory it it
1401 possible to tell by context, but GNU Chill doesn't accept the control
1402 sequence form, so neither do we (for now the code is disabled).
1404 Returns CHARACTER_LITERAL if a match is found.
1408 match_character_literal ()
1410 char *tokptr = lexptr;
1413 if ((*tokptr == 'c' || *tokptr == 'C') && (*(tokptr + 1) == '\''))
1415 /* We have a GNU chill extension form, so skip the leading "C'",
1416 decode the hex value, and then ensure that we have a trailing
1417 single quote character. */
1419 if (!decode_integer_value (16, &tokptr, &ival) || (*tokptr != '\''))
1425 else if (*tokptr == '\'')
1429 /* Determine which form we have, either a control sequence or the
1430 single character form. */
1432 if ((*tokptr == '^') && (*(tokptr + 1) == '('))
1434 #if 0 /* Disable, see note above. -fnf */
1435 /* Match and decode a control sequence. Return zero if we don't
1436 find a valid integer literal, or if the next unconsumed character
1437 after the integer literal is not the trailing ')'.
1438 FIXME: We currently don't handle the multiple integer literal
1441 if (!decode_integer_literal (&ival, &tokptr) || (*tokptr++ != ')'))
1454 /* The trailing quote has not yet been consumed. If we don't find
1455 it, then we have no match. */
1457 if (*tokptr++ != '\'')
1464 /* Not a character literal. */
1467 yylval.typed_val.val = ival;
1468 yylval.typed_val.type = builtin_type_chill_char;
1470 return (CHARACTER_LITERAL);
1473 /* Recognize an integer literal, as specified in Z.200 sec 5.2.4.2.
1474 Note that according to 5.2.4.2, a single "_" is also a valid integer
1475 literal, however GNU-chill requires there to be at least one "digit"
1476 in any integer literal. */
1479 match_integer_literal ()
1481 char *tokptr = lexptr;
1484 if (!decode_integer_literal (&ival, &tokptr))
1490 yylval.typed_val.val = ival;
1491 yylval.typed_val.type = builtin_type_int;
1493 return (INTEGER_LITERAL);
1497 /* Recognize a bit-string literal, as specified in Z.200 sec 5.2.4.8
1498 Note that according to 5.2.4.8, a single "_" is also a valid bit-string
1499 literal, however GNU-chill requires there to be at least one "digit"
1500 in any bit-string literal. */
1503 match_bitstring_literal ()
1505 register char *tokptr = lexptr;
1515 /* Look for the required explicit base specifier. */
1536 /* Ensure that the character after the explicit base is a single quote. */
1538 if (*tokptr++ != '\'')
1543 while (*tokptr != '\0' && *tokptr != '\'')
1546 if (isupper (digit))
1547 digit = tolower (digit);
1553 case '0': case '1': case '2': case '3': case '4':
1554 case '5': case '6': case '7': case '8': case '9':
1557 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
1565 if (digit >= 1 << bits_per_char)
1567 /* Found something not in domain for current base. */
1572 /* Extract bits from digit, packing them into the bitstring byte. */
1573 int k = TARGET_BYTE_ORDER == BIG_ENDIAN ? bits_per_char - 1 : 0;
1574 for (; TARGET_BYTE_ORDER == BIG_ENDIAN ? k >= 0 : k < bits_per_char;
1575 TARGET_BYTE_ORDER == BIG_ENDIAN ? k-- : k++)
1578 if (digit & (1 << k))
1580 tempbuf[tempbufindex] |=
1581 (TARGET_BYTE_ORDER == BIG_ENDIAN)
1582 ? (1 << (HOST_CHAR_BIT - 1 - bitoffset))
1586 if (bitoffset == HOST_CHAR_BIT)
1591 tempbuf[tempbufindex] = 0;
1597 /* Verify that we consumed everything up to the trailing single quote,
1598 and that we found some bits (IE not just underbars). */
1600 if (*tokptr++ != '\'')
1606 yylval.sval.ptr = tempbuf;
1607 yylval.sval.length = bitcount;
1609 return (BIT_STRING_LITERAL);
1613 /* Recognize tokens that start with '$'. These include:
1615 $regname A native register name or a "standard
1617 Return token GDB_REGNAME.
1619 $variable A convenience variable with a name chosen
1621 Return token GDB_VARIABLE.
1623 $digits Value history with index <digits>, starting
1624 from the first value which has index 1.
1627 $$digits Value history with index <digits> relative
1628 to the last value. I.E. $$0 is the last
1629 value, $$1 is the one previous to that, $$2
1630 is the one previous to $$1, etc.
1631 Return token GDB_LAST.
1633 $ | $0 | $$0 The last value in the value history.
1634 Return token GDB_LAST.
1636 $$ An abbreviation for the second to the last
1637 value in the value history, I.E. $$1
1638 Return token GDB_LAST.
1640 Note that we currently assume that register names and convenience
1641 variables follow the convention of starting with a letter or '_'.
1646 match_dollar_tokens ()
1654 /* We will always have a successful match, even if it is just for
1655 a single '$', the abbreviation for $$0. So advance lexptr. */
1659 if (*tokptr == '_' || isalpha (*tokptr))
1661 /* Look for a match with a native register name, usually something
1662 like "r0" for example. */
1664 for (regno = 0; regno < NUM_REGS; regno++)
1666 namelength = strlen (reg_names[regno]);
1667 if (STREQN (tokptr, reg_names[regno], namelength)
1668 && !isalnum (tokptr[namelength]))
1670 yylval.lval = regno;
1671 lexptr += namelength;
1672 return (GDB_REGNAME);
1676 /* Look for a match with a standard register name, usually something
1677 like "pc", which gdb always recognizes as the program counter
1678 regardless of what the native register name is. */
1680 for (regno = 0; regno < num_std_regs; regno++)
1682 namelength = strlen (std_regs[regno].name);
1683 if (STREQN (tokptr, std_regs[regno].name, namelength)
1684 && !isalnum (tokptr[namelength]))
1686 yylval.lval = std_regs[regno].regnum;
1687 lexptr += namelength;
1688 return (GDB_REGNAME);
1692 /* Attempt to match against a convenience variable. Note that
1693 this will always succeed, because if no variable of that name
1694 already exists, the lookup_internalvar will create one for us.
1695 Also note that both lexptr and tokptr currently point to the
1696 start of the input string we are trying to match, and that we
1697 have already tested the first character for non-numeric, so we
1698 don't have to treat it specially. */
1700 while (*tokptr == '_' || isalnum (*tokptr))
1704 yylval.sval.ptr = lexptr;
1705 yylval.sval.length = tokptr - lexptr;
1706 yylval.ivar = lookup_internalvar (copy_name (yylval.sval));
1708 return (GDB_VARIABLE);
1711 /* Since we didn't match against a register name or convenience
1712 variable, our only choice left is a history value. */
1726 /* Attempt to decode more characters as an integer value giving
1727 the index in the history list. If successful, the value will
1728 overwrite ival (currently 0 or 1), and if not, ival will be
1729 left alone, which is good since it is currently correct for
1730 the '$' or '$$' case. */
1732 decode_integer_literal (&ival, &tokptr);
1733 yylval.lval = negate ? -ival : ival;
1744 static const struct token idtokentab[] =
1747 { "length", LENGTH },
1758 { "max", MAX_TOKEN },
1759 { "min", MIN_TOKEN },
1768 { "null", EMPTINESS_LITERAL }
1771 static const struct token tokentab2[] =
1773 { ":=", GDB_ASSIGNMENT },
1774 { "//", SLASH_SLASH },
1781 /* Read one token, getting characters through lexptr. */
1782 /* This is where we will check to make sure that the language and the
1783 operators used are compatible. */
1793 /* Skip over any leading whitespace. */
1794 while (isspace (*lexptr))
1798 /* Look for special single character cases which can't be the first
1799 character of some other multicharacter token. */
1816 /* Look for characters which start a particular kind of multicharacter
1817 token, such as a character literal, register name, convenience
1818 variable name, string literal, etc. */
1823 /* First try to match a string literal, which is any
1824 sequence of characters enclosed in matching single or double
1825 quotes, except that a single character inside single quotes
1826 is a character literal, so we have to catch that case also. */
1827 token = match_string_literal ();
1832 if (*lexptr == '\'')
1834 token = match_character_literal ();
1843 token = match_character_literal ();
1850 token = match_dollar_tokens ();
1857 /* See if it is a special token of length 2. */
1858 for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
1860 if (STREQN (lexptr, tokentab2[i].operator, 2))
1863 return (tokentab2[i].token);
1866 /* Look for single character cases which which could be the first
1867 character of some other multicharacter token, but aren't, or we
1868 would already have found it. */
1878 /* Look for a float literal before looking for an integer literal, so
1879 we match as much of the input stream as possible. */
1880 token = match_float_literal ();
1885 token = match_bitstring_literal ();
1890 token = match_integer_literal ();
1896 /* Try to match a simple name string, and if a match is found, then
1897 further classify what sort of name it is and return an appropriate
1898 token. Note that attempting to match a simple name string consumes
1899 the token from lexptr, so we can't back out if we later find that
1900 we can't classify what sort of name it is. */
1902 inputname = match_simple_name_string ();
1904 if (inputname != NULL)
1906 char *simplename = (char*) alloca (strlen (inputname) + 1);
1908 char *dptr = simplename, *sptr = inputname;
1909 for (; *sptr; sptr++)
1910 *dptr++ = isupper (*sptr) ? tolower(*sptr) : *sptr;
1913 /* See if it is a reserved identifier. */
1914 for (i = 0; i < sizeof (idtokentab) / sizeof (idtokentab[0]); i++)
1916 if (STREQ (simplename, idtokentab[i].operator))
1918 return (idtokentab[i].token);
1922 /* Look for other special tokens. */
1923 if (STREQ (simplename, "true"))
1926 return (BOOLEAN_LITERAL);
1928 if (STREQ (simplename, "false"))
1931 return (BOOLEAN_LITERAL);
1934 sym = lookup_symbol (inputname, expression_context_block,
1935 VAR_NAMESPACE, (int *) NULL,
1936 (struct symtab **) NULL);
1937 if (sym == NULL && strcmp (inputname, simplename) != 0)
1939 sym = lookup_symbol (simplename, expression_context_block,
1940 VAR_NAMESPACE, (int *) NULL,
1941 (struct symtab **) NULL);
1945 yylval.ssym.stoken.ptr = NULL;
1946 yylval.ssym.stoken.length = 0;
1947 yylval.ssym.sym = sym;
1948 yylval.ssym.is_a_field_of_this = 0; /* FIXME, C++'ism */
1949 switch (SYMBOL_CLASS (sym))
1952 /* Found a procedure name. */
1953 return (GENERAL_PROCEDURE_NAME);
1955 /* Found a global or local static variable. */
1956 return (LOCATION_NAME);
1961 case LOC_REGPARM_ADDR:
1965 case LOC_BASEREG_ARG:
1966 if (innermost_block == NULL
1967 || contained_in (block_found, innermost_block))
1969 innermost_block = block_found;
1971 return (LOCATION_NAME);
1975 return (LOCATION_NAME);
1978 yylval.tsym.type = SYMBOL_TYPE (sym);
1981 case LOC_CONST_BYTES:
1982 case LOC_OPTIMIZED_OUT:
1983 error ("Symbol \"%s\" names no location.", inputname);
1987 else if (!have_full_symbols () && !have_partial_symbols ())
1989 error ("No symbol table is loaded. Use the \"file\" command.");
1993 error ("No symbol \"%s\" in current context.", inputname);
1997 /* Catch single character tokens which are not part of some
2002 case '.': /* Not float for example. */
2004 while (isspace (*lexptr)) lexptr++;
2005 inputname = match_simple_name_string ();
2011 return (ILLEGAL_TOKEN);
2018 error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);