module brcpg. % Bounded Right Context Parser Generator tests % some small grammars for experimentation terminal X :- oncememb X [bofs,eofs,plust,eqt,timest,lparen,rparen,(const V),(id S)]. non_terminal X :- oncememb X [sx,ex,tx,fx,lx,rx]. % sx ==> [ex] must ALWAYS be first production!! ntnum 4. % number of non_terminals for gammar being considered. cfg % BRC(1,1), but not simple BRC (SR conflict) [ rule ( sx ==> [ex] ) true, rule ( ex ==> [lx,eqt,rx] ) true, rule ( ex ==> [rx] ) true, rule ( lx ==> [timest,rx] ) true, rule ( lx ==> [const K] ) true, rule ( rx ==> [lx] ) true ] :- !. cfg % really ambiguous gammar [ rule (sx ==> [ex]) true, rule (ex ==> [const V]) true, rule (ex ==> [ex,timest,ex]) true, rule (ex ==> [ex,plust,ex]) true, rule (ex ==> [ex,eqt,ex]) true ] :- !. binaryop plust ex ex "left" 3. binaryop timest ex ex "left" 2. binaryop eqt ex ex "left" 4. cfg % ambiguous w/ sr-conflict [ rule (sx ==> [ex]) true, rule (ex ==> [id X]) true, rule (ex ==> [ex,ex]) true ] :- !. cfg % SBRC example [ rule ( sx ==> [ex] ) true, rule ( ex ==> [ex,plust,tx] ) true, rule ( ex ==> [tx] ) true, rule ( tx ==> [tx,timest,fx] ) true, rule ( tx ==> [fx] ) true, rule ( fx ==> [lparen,ex,rparen] ) true, rule ( fx ==> [const V] ) true ] :- !. cfg % BRC(1,1) and LR(1) and not SBRC or LALR (from Dragon book) [ rule ( sx ==> [ex] ) true, rule ( ex ==> [id "a", tx, id "d"]) true, rule ( ex ==> [id "a", fx, id "e"]) true, rule ( ex ==> [id "b", tx, id "e"]) true, rule ( ex ==> [id "b", fx, id "d"]) true, rule ( tx ==> [id "c"] ) true, rule ( fx ==> [id "c"] ) true ] :- !. cfg % ambiguous w/ rr-conflict [ rule (sx ==> [ex]) true, rule (ex ==> [timest]) true, rule (ex ==> [ex,timest]) true, rule (ex ==> [plust,ex,timest]) true ] :- !. freshcopy T T.