+/* FINPUT is pointing to a location (i.e., a `@'). Output to FOUTPUT
+ a reference to this location. STACK_OFFSET is the number of values
+ in the current rule so far, which says where to find `$0' with
+ respect to the top of the stack. */
+static inline void
+copy_at (FILE *finput, FILE *foutput, int stack_offset)
+{
+ int c;
+
+ c = getc (finput);
+ if (c == '$')
+ {
+ fprintf (foutput, "yyloc");
+ yylsp_needed = 1;
+ }
+ else if (isdigit(c) || c == '-')
+ {
+ int n;
+
+ ungetc (c, finput);
+ n = read_signed_integer (finput);
+
+ fprintf (foutput, "yylsp[%d]", n - stack_offset);
+ yylsp_needed = 1;
+ }
+ else
+ complain (_("@%s is invalid"), printable_version (c));
+}
+
+
+/* Get the data type (alternative in the union) of the value for
+ symbol n in rule rule. */