Lier par "let" les $i dans les actions.

Patch de A.Frey pour les ' en fin de ligne.


git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1631 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
master
Xavier Leroy 1997-06-30 14:02:55 +00:00
parent 448812985f
commit a7ed1abb5b
1 changed files with 20 additions and 21 deletions

View File

@ -95,21 +95,15 @@ void get_line()
for (;;)
{
line[i] = c;
if (c == '\n') { cptr = line; return; }
if (++i >= linesize)
{
linesize += LINESIZE;
line = REALLOC(line, linesize);
if (line == 0) no_space();
}
if (c == '\n') { line[i] = '\0'; cptr = line; return; }
c = getc(f);
if (c == EOF)
{
line[i] = '\n';
saw_eof = 1;
cptr = line;
return;
}
if (c == EOF) { saw_eof = 1; c = '\n'; }
}
}
@ -1218,13 +1212,26 @@ void copy_action()
fprintf(f, "(* Rule %d, file %s, line %d *)\n",
nrules-2, input_file_name, lineno);
if (sflag)
fprintf(f, "yyact.(%d) <- (fun parser_env -> Obj.repr((", nrules-2);
fprintf(f, "yyact.(%d) <- (fun parser_env ->\n", nrules-2);
else
fprintf(f, "; (fun parser_env -> Obj.repr((");
fprintf(f, "; (fun parser_env ->\n");
n = 0;
for (i = nitems - 1; pitem[i]; --i) ++n;
for (i = 1; i <= n; i++) {
item = pitem[nitems + i - n - 1];
if (item->class == TERM && !item->tag) continue;
fprintf(f, "\tlet dollar__%d = ", i);
if (item->tag)
fprintf(f, "(peek_val parser_env %d : %s) in\n", n - i, item->tag);
else if (sflag)
fprintf(f, "peek_val parser_env %d in\n", n - i);
else
fprintf(f, "(peek_val parser_env %d : '%s) in\n", n - i, item->name);
}
fprintf(f, "\tObj.repr((");
depth = 1;
cptr++;
@ -1240,17 +1247,9 @@ loop:
if (i <= 0 || i > n)
unknown_rhs(i);
item = pitem[nitems + i - n - 1];
if (item->tag) {
fprintf(f, "(peek_val parser_env %d : %s)", n - i, item->tag);
} else {
if (item->class == TERM)
illegal_token_ref(i, item->name);
if (sflag)
fprintf(f, "(peek_val parser_env %d)", n - i);
else
fprintf(f, "(peek_val parser_env %d : '%s)",
n - i, item->name);
}
if (item->class == TERM && !item->tag)
illegal_token_ref(i, item->name);
fprintf(f, "dollar__%d", i);
goto loop;
}
}