Grammar has 34 nonterminal symbols, among which 2 start symbols.
Grammar has 78 terminal symbols.
Grammar has 140 productions.
nullable(vars) = true
nullable(tyapp) = false
nullable(ty0s) = true
nullable(ty0) = false
nullable(ty) = false
nullable(sig_decl) = false
nullable(qv) = false
nullable(quantifier) = false
nullable(qual_id) = false
nullable(qlist) = false
nullable(prog) = false
nullable(preterms_brack) = false
nullable(preterm_brack) = false
nullable(preterm0) = false
nullable(preterm) = false
nullable(parse_input_line) = false
nullable(parse) = false
nullable(kind) = false
nullable(infixr_preterm) = false
nullable(infixn_preterm) = false
nullable(infixl_preterm) = false
nullable(infix_decl) = false
nullable(goal_decl) = false
nullable(goal) = false
nullable(directive) = false
nullable(decls) = true
nullable(decl) = false
nullable(dcg_term) = false
nullable(dcg_rule) = false
nullable(constr) = false
nullable(const) = false
nullable(comma_tys) = false
nullable(app_or_qid) = false
nullable(app) = false
first(vars) = ID
first(tyapp) = QUAL_ID ID
first(ty0s) = UNDERSCORE QUAL_ID LPAREN LBRACK ID
first(ty0) = UNDERSCORE QUAL_ID LPAREN LBRACK ID
first(ty) = UNDERSCORE QUAL_ID LPAREN LBRACK ID
first(sig_decl) = TYPE PRED ID FUNC CNST
first(qv) = ID
first(quantifier) = NEW FORALL EXISTS
first(qual_id) = QUAL_ID ID
first(qlist) = ID
first(prog) = UNDERSCORE TRUE QUAL_ID NOT NEW LPAREN LITERAL LBRACK INT ID FORALL EXISTS CUT CHAR
first(preterms_brack) = UNDERSCORE TRUE QUAL_ID LPAREN LITERAL LBRACK INT ID CUT CHAR
first(preterm_brack) = UNDERSCORE TRUE QUAL_ID LPAREN LITERAL LBRACK INT ID CUT CHAR
first(preterm0) = UNDERSCORE TRUE QUAL_ID LPAREN LITERAL LBRACK INT ID CUT CHAR
first(preterm) = UNDERSCORE TRUE QUAL_ID NOT NEW LPAREN LITERAL LBRACK INT ID FORALL EXISTS CUT CHAR
first(parse_input_line) = USE UNDERSCORE TYPEQ TRUE TRACE QUIT QUAL_ID OPEN NOT NEW LPAREN LITERAL LBRACK INT INFIXR INFIXN INFIXL ID HELP FORALL EXISTS EOF CUT CHAR
first(parse) = USE UNDERSCORE TYPEQ TYPE TRUE TRACE QUIT QUESTION QUAL_ID PRED OPEN NOT NEW NAMESPACE LPAREN LITERAL LBRACK INT INFIXR INFIXN INFIXL ID HELP FUNC FORALL EXISTS EOF CUT CNST CHAR
first(kind) = TYPE NAME_TYPE
first(infixr_preterm) = UNDERSCORE TRUE QUAL_ID NOT NEW LPAREN LITERAL LBRACK INT ID FORALL EXISTS CUT CHAR
first(infixn_preterm) = UNDERSCORE TRUE QUAL_ID NOT NEW LPAREN LITERAL LBRACK INT ID FORALL EXISTS CUT CHAR
first(infixl_preterm) = UNDERSCORE TRUE QUAL_ID NOT NEW LPAREN LITERAL LBRACK INT ID FORALL EXISTS CUT CHAR
first(infix_decl) = INFIXR INFIXN INFIXL
first(goal_decl) = USE UNDERSCORE TYPEQ TRUE TRACE QUIT QUAL_ID OPEN NOT NEW LPAREN LITERAL LBRACK INT INFIXR INFIXN INFIXL ID HELP FORALL EXISTS CUT CHAR
first(goal) = UNDERSCORE TRUE QUAL_ID NOT NEW LPAREN LITERAL LBRACK INT ID FORALL EXISTS CUT CHAR
first(directive) = USE TYPEQ TRACE QUIT OPEN HELP
first(decls) = USE UNDERSCORE TYPEQ TYPE TRUE TRACE QUIT QUESTION QUAL_ID PRED OPEN NOT NEW NAMESPACE LPAREN LITERAL LBRACK INT INFIXR INFIXN INFIXL ID HELP FUNC FORALL EXISTS CUT CNST CHAR
first(decl) = USE UNDERSCORE TYPEQ TYPE TRUE TRACE QUIT QUESTION QUAL_ID PRED OPEN NOT NEW NAMESPACE LPAREN LITERAL LBRACK INT INFIXR INFIXN INFIXL ID HELP FUNC FORALL EXISTS CUT CNST CHAR
first(dcg_term) = QUAL_ID LITERAL LBRACE ID CHAR
first(dcg_rule) = QUAL_ID ID
first(constr) = ID
first(const) = UNDERSCORE TRUE LPAREN LITERAL LBRACK INT CUT CHAR
first(comma_tys) = UNDERSCORE QUAL_ID LPAREN LBRACK ID
follow(decls) = USE UNDERSCORE TYPEQ TYPE TRUE TRACE RPAREN QUIT QUESTION QUAL_ID PRED OPEN NOT NEW NAMESPACE LPAREN LITERAL LBRACK INT INFIXR INFIXN INFIXL ID HELP FUNC FORALL EXISTS EOF CUT CNST CHAR