+++ /dev/null
-%{
-char rcsid_gram[] = "$Id$";
-
-#include <stdio.h>
-#include "b.h"
-#include "fe.h"
-int doGram(List);
-%}
-
-%union {
- int y_int;
- char *y_string;
- Arity y_arity;
- Binding y_binding;
- PatternAST y_patternAST;
- RuleAST y_ruleAST;
- List y_list;
- IntList y_intlist;
-}
-
-%start full
-
-%term ERROR
-%term K_TERM
-%term K_GRAM
-%term K_START
-%term K_PPERCENT
-%term INT
-%term ID
-
-%token <y_string> ID
-%token <y_int> INT
-
-%type <y_arity> decl
-%type <y_binding> binding
-%type <y_intlist> cost costtail
-%type <y_ruleAST> rule
-%type <y_patternAST> pattern
-%type <y_list> decls rules bindinglist grammarlist
-%%
-
-
-full : spec
- | spec K_PPERCENT
- { yyfinished(); }
- ;
-
-spec : decls K_PPERCENT rules
- { doSpec($1, $3); }
- ;
-
-decls : /* lambda */ { $$ = 0; }
- | decls decl { $$ = newList($2, $1); }
- ;
-
-decl : K_TERM bindinglist { $$ = newArity(-1, $2); }
- | K_GRAM grammarlist { $$ = 0; doGram($2); }
- | K_START ID { $$ = 0; doStart($2); } /* kludge */
- ;
-
-grammarlist : /* lambda */ { $$ = 0; }
- | grammarlist ID { $$ = newList($2, $1); }
- ;
-
-bindinglist : /* lambda */ { $$ = 0; }
- | bindinglist binding { $$ = newList($2, $1); }
- ;
-
-binding : ID '=' INT { $$ = newBinding($1, $3); }
- ;
-
-rules : /* lambda */ { $$ = 0; }
- | rules rule { $$ = newList($2, $1); }
- ;
-
-rule : ID ':' pattern '=' INT cost ';' { $$ = newRuleAST($1, $3, $5, $6); }
- ;
-
-pattern : ID { $$ = newPatternAST($1, 0); }
- | ID '(' pattern ')' { $$ = newPatternAST($1, newList($3,0)); }
- | ID '(' pattern ',' pattern ')' { $$ = newPatternAST($1, newList($3, newList($5, 0))); }
- ;
-
-cost : /* lambda */ { $$ = 0; }
- | '(' INT costtail ')' { $$ = newIntList($2, $3); }
- ;
-
-costtail : /* lambda */ { $$ = 0; }
- | ',' INT costtail { $$ = newIntList($2, $3); }
- | INT costtail { $$ = newIntList($1, $2); }
- ;