summaryrefslogtreecommitdiff
path: root/yacc
diff options
context:
space:
mode:
authorDamien Doligez <damien.doligez-inria.fr>1996-09-05 17:36:14 +0000
committerDamien Doligez <damien.doligez-inria.fr>1996-09-05 17:36:14 +0000
commit30f1bdfd9e2c9645bca2261974d62154f67621e0 (patch)
tree096b31aea7096bbcb8de65d73dc78e599cc6f649 /yacc
parentbcd1f0f833202d86975e5dba6a0808216cc0c728 (diff)
downloadocaml-30f1bdfd9e2c9645bca2261974d62154f67621e0.tar.gz
"|" optionnel devant la première production
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@960 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'yacc')
-rw-r--r--yacc/reader.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/yacc/reader.c b/yacc/reader.c
index 63688e354e..668fd55654 100644
--- a/yacc/reader.c
+++ b/yacc/reader.c
@@ -1092,6 +1092,8 @@ void advance_to_start()
}
+int at_first;
+
void start_rule(bp, s_lineno)
register bucket *bp;
int s_lineno;
@@ -1104,6 +1106,7 @@ void start_rule(bp, s_lineno)
plhs[nrules] = bp;
rprec[nrules] = UNDEFINED;
rassoc[nrules] = TOKEN;
+ at_first = 1;
}
@@ -1398,6 +1401,11 @@ void read_grammar()
for (;;)
{
c = nextc();
+ if (c == '|' && at_first){
+ ++cptr;
+ c = nextc();
+ }
+ at_first = 0;
if (c == EOF) break;
if (isalpha(c) || c == '_' || c == '.' || c == '$' || c == '\'' ||
c == '"')
@@ -1723,7 +1731,7 @@ void pack_grammar()
void print_grammar()
{
register int i, j, k;
- int spacing;
+ int spacing = 0;
register FILE *f = verbose_file;
if (!vflag) return;