+ {
+ const char *string;
+ enum exp_opcode opcode;
+ /* Precedence of operator. These values are used only by comparisons. */
+ enum precedence precedence;
+
+ /* For a binary operator: 1 iff right associate.
+ For a unary operator: 1 iff postfix. */
+ int right_assoc;
+ };
+
+/* Information needed to print, prefixify, and evaluate expressions for
+ a given language. */
+
+struct exp_descriptor
+ {
+ /* Print subexpression. */
+ void (*print_subexp) (struct expression *, int *, struct ui_file *,
+ enum precedence);
+
+ /* Returns number of exp_elements needed to represent an operator and
+ the number of subexpressions it takes. */
+ void (*operator_length) (const struct expression*, int, int*, int *);
+
+ /* Call OBJFILE_FUNC for any objfile found being referenced by the
+ single operator of EXP at position POS. Operator parameters are
+ located at positive (POS + number) offsets in EXP. OBJFILE_FUNC
+ should never be called with NULL OBJFILE. OBJFILE_FUNC should
+ get passed an arbitrary caller supplied DATA pointer. If it
+ returns non-zero value then (any other) non-zero value should be
+ immediately returned to the caller. Otherwise zero should be
+ returned. */
+ int (*operator_check) (struct expression *exp, int pos,
+ int (*objfile_func) (struct objfile *objfile,
+ void *data),
+ void *data);
+
+ /* Name of this operator for dumping purposes.
+ The returned value should never be NULL, even if EXP_OPCODE is
+ an unknown opcode (a string containing an image of the numeric
+ value of the opcode can be returned, for instance). */
+ const char *(*op_name) (enum exp_opcode);
+
+ /* Dump the rest of this (prefix) expression after the operator
+ itself has been printed. See dump_subexp_body_standard in
+ (expprint.c). */
+ int (*dump_subexp_body) (struct expression *, struct ui_file *, int);
+
+ /* Evaluate an expression. */
+ struct value *(*evaluate_exp) (struct type *, struct expression *,
+ int *, enum noside);
+ };
+
+
+/* Default descriptor containing standard definitions of all
+ elements. */
+extern const struct exp_descriptor exp_descriptor_standard;
+
+/* Functions used by language-specific extended operators to (recursively)
+ print/dump subexpressions. */
+
+extern void print_subexp (struct expression *, int *, struct ui_file *,
+ enum precedence);
+
+extern void print_subexp_standard (struct expression *, int *,
+ struct ui_file *, enum precedence);
+
+/* Function used to avoid direct calls to fprintf
+ in the code generated by the bison parser. */
+
+extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3);
+
+extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile);
+
+#endif /* PARSER_DEFS_H */
+