LL(1) Parsing 

> varSet := {Sre,Tre,Pre,Fre}:
termSet := {"+",".","*","(",")",t1,t2,t3}:
startSymbol := Sre:
prodTable := table([Sre={[Sre,"+",Tre],[Tre]}, Tre={[Tre,".",Pre],[Pre]}, Pre={[Fre,"*"],[Fre]}, Fre={["(",Sre,")"],[t1],[t2],[t3],[lambda]}]):
cfg:=CFG(varSet,termSet,startSymbol,op(prodTable));
fs:=firstSetLL1(cfg);
followSetLL1(cfg,fs);
parsingTableLL1(cfg);
 

`:=`(cfg, CFG({Sre, Tre, Pre, Fre}, {
`:=`(cfg, CFG({Sre, Tre, Pre, Fre}, {
`:=`(cfg, CFG({Sre, Tre, Pre, Fre}, {
(10.10.1)
 

`:=`(fs, TABLE([
`:=`(fs, TABLE([
`:=`(fs, TABLE([
(10.10.1)
 

TABLE([Sre = {
TABLE([Sre = {
(10.10.1)
 

TABLE([(Sre,
TABLE([(Sre,
TABLE([(Sre,
TABLE([(Sre,
TABLE([(Sre,
TABLE([(Sre,
TABLE([(Sre,
TABLE([(Sre,
TABLE([(Sre,
TABLE([(Sre,
TABLE([(Sre,
(10.10.1)
 

> type(cfg,LL1);
 

false (10.10.2)
 

> #parseLL1(cfg,[t1,"+",t2]); ###Will never terminate
 

> varSet := {E, T, E1,T1,F}:
termSet := {plus,star,l_pen,r_pen,id}:
startSymbol := E:
prodTable := table([ E={[T,E1]},E1={[plus,T,E1],[lambda]},T={[F,T1]},T1={[star,F,T1],[lambda]},F={[l_pen,E,r_pen],[id]}]):
cfg2:=CFG(varSet,termSet,startSymbol,op(prodTable));
parsingTableLL1(cfg2);
 

`:=`(cfg2, CFG({T, E, T1, E1, {q2, q3}}, {id, plus, star, l_pen, r_pen}, E, TABLE([{q2, q3} = {[l_pen, E, r_pen], [id]}, T1 = {[star, {q2, q3}, T1], [lambda]}, T = {[{q2, q3}, T1]}, E = {[T, E1]}, E1 ...
`:=`(cfg2, CFG({T, E, T1, E1, {q2, q3}}, {id, plus, star, l_pen, r_pen}, E, TABLE([{q2, q3} = {[l_pen, E, r_pen], [id]}, T1 = {[star, {q2, q3}, T1], [lambda]}, T = {[{q2, q3}, T1]}, E = {[T, E1]}, E1 ...
`:=`(cfg2, CFG({T, E, T1, E1, {q2, q3}}, {id, plus, star, l_pen, r_pen}, E, TABLE([{q2, q3} = {[l_pen, E, r_pen], [id]}, T1 = {[star, {q2, q3}, T1], [lambda]}, T = {[{q2, q3}, T1]}, E = {[T, E1]}, E1 ...
(10.10.3)
 

TABLE([(E, l_pen) = {[T, E1]}, (E1, plus) = {[plus, T, E1]}, (T1, star) = {[star, {q2, q3}, T1]}, ({q2, q3}, l_pen) = {[l_pen, E, r_pen]}, (T1,
TABLE([(E, l_pen) = {[T, E1]}, (E1, plus) = {[plus, T, E1]}, (T1, star) = {[star, {q2, q3}, T1]}, ({q2, q3}, l_pen) = {[l_pen, E, r_pen]}, (T1,
TABLE([(E, l_pen) = {[T, E1]}, (E1, plus) = {[plus, T, E1]}, (T1, star) = {[star, {q2, q3}, T1]}, ({q2, q3}, l_pen) = {[l_pen, E, r_pen]}, (T1,
TABLE([(E, l_pen) = {[T, E1]}, (E1, plus) = {[plus, T, E1]}, (T1, star) = {[star, {q2, q3}, T1]}, ({q2, q3}, l_pen) = {[l_pen, E, r_pen]}, (T1,
(10.10.3)
 

> type(cfg2,LL1);
 

true (10.10.4)
 

> varSet:= {exp,expp,term,termp,factor,addop,mulop}:
termSet:= {"+","-","*","(",")",number}:
startSymbol:= exp:
prodTable:= table([exp={[term, expp]},expp={[addop,term,expp],[lambda]},
addop={["+"],["-"]},term={[factor,termp]},
termp={[mulop,factor,termp],[lambda]},mulop={["*"]},
factor={["(",exp,")"],[number]}]):
cfg4_4:=CFG(varSet,termSet,startSymbol,op(prodTable));
parsingTableLL1(cfg4_4);
 

`:=`(cfg4_4, CFG({addop, factor, exp, mulop, expp, term, termp}, {
`:=`(cfg4_4, CFG({addop, factor, exp, mulop, expp, term, termp}, {
`:=`(cfg4_4, CFG({addop, factor, exp, mulop, expp, term, termp}, {
`:=`(cfg4_4, CFG({addop, factor, exp, mulop, expp, term, termp}, {
(10.10.5)
 

TABLE([(factor, number) = {[number]}, (termp,
TABLE([(factor, number) = {[number]}, (termp,
TABLE([(factor, number) = {[number]}, (termp,
TABLE([(factor, number) = {[number]}, (termp,
TABLE([(factor, number) = {[number]}, (termp,
TABLE([(factor, number) = {[number]}, (termp,
(10.10.5)
 

> type(cfg4_4,LL1);
 

true (10.10.6)
 

> printlevel:=0:parseLL1(cfg4_4,[number,"-",number,"*","(",number,")"]);
 

L_DERIV([exp = [term, expp], term = [factor, termp], factor = [number], termp = [lambda], expp = [addop, term, expp], addop = [
L_DERIV([exp = [term, expp], term = [factor, termp], factor = [number], termp = [lambda], expp = [addop, term, expp], addop = [
L_DERIV([exp = [term, expp], term = [factor, termp], factor = [number], termp = [lambda], expp = [addop, term, expp], addop = [
L_DERIV([exp = [term, expp], term = [factor, termp], factor = [number], termp = [lambda], expp = [addop, term, expp], addop = [
(10.10.7)
 

> parseLL1(cfg4_4,[number,"+","(",number,"*",number,")"],derivation=true);
 

`exp =>  term expp  =>  factor termp expp  =>  number termp expp  => number  expp  => number  addop term expp  => number  + term expp  => number +  factor termp expp  => number +  ( exp ) termp expp  ...
`exp =>  term expp  =>  factor termp expp  =>  number termp expp  => number  expp  => number  addop term expp  => number  + term expp  => number +  factor termp expp  => number +  ( exp ) termp expp  ...
`exp =>  term expp  =>  factor termp expp  =>  number termp expp  => number  expp  => number  addop term expp  => number  + term expp  => number +  factor termp expp  => number +  ( exp ) termp expp  ...
`exp =>  term expp  =>  factor termp expp  =>  number termp expp  => number  expp  => number  addop term expp  => number  + term expp  => number +  factor termp expp  => number +  ( exp ) termp expp  ...
`exp =>  term expp  =>  factor termp expp  =>  number termp expp  => number  expp  => number  addop term expp  => number  + term expp  => number +  factor termp expp  => number +  ( exp ) termp expp  ...
`exp =>  term expp  =>  factor termp expp  =>  number termp expp  => number  expp  => number  addop term expp  => number  + term expp  => number +  factor termp expp  => number +  ( exp ) termp expp  ...
`exp =>  term expp  =>  factor termp expp  =>  number termp expp  => number  expp  => number  addop term expp  => number  + term expp  => number +  factor termp expp  => number +  ( exp ) termp expp  ...
(10.10.8)
 

> parseLL1(cfg4_4,["(",number,")"],tree=true);
 

Plot_2d
 

> parseLL1(cfg4_4,["(",")"]);
 

Error, (in fola:-parseLL1) Cannot parse! Something is wrong with the grammar or the string.
 

> varSet:= {statement,if_stmt,else_part,exp}:
termSet:= {"other", "if", "(", ")", "else",0,1}:
startSymbol:= statement:
prodTable:= table([statement={[if_stmt],["other"]},if_stmt={["if","(",exp,")",statement,else_part]},else_part={["else", statement],[lambda]},exp={[0],[1]}]):
cfg4_3:=CFG(varSet,termSet,startSymbol,op(prodTable));
parsingTableLL1(cfg4_3);
 

`:=`(cfg4_3, CFG({exp, else_part, if_stmt, statement}, {0, 1,
`:=`(cfg4_3, CFG({exp, else_part, if_stmt, statement}, {0, 1,
`:=`(cfg4_3, CFG({exp, else_part, if_stmt, statement}, {0, 1,
(10.10.9)
 

TABLE([(exp, 0) = {[0]}, (else_part,
TABLE([(exp, 0) = {[0]}, (else_part,
TABLE([(exp, 0) = {[0]}, (else_part,
(10.10.9)
 

> type(cfg4_3,LL1);
 

false (10.10.10)
 

> varSet:= {stmt_sequence,stmt_seq_p,stmt}:
termSet:= {";",s}:
startSymbol:= stmt_sequence:
prodTable:= table([stmt_sequence={[stmt,stmt_seq_p]},stmt_seq_p={[";",stmt_sequence],[lambda]},stmt={[s]}]):
cfg4_17:=CFG(varSet,termSet,startSymbol,op(prodTable));
parsingTableLL1(cfg4_17);
 

`:=`(cfg4_17, CFG({stmt_seq_p, stmt, stmt_sequence}, {
`:=`(cfg4_17, CFG({stmt_seq_p, stmt, stmt_sequence}, {
(10.10.11)
 

TABLE([(stmt_sequence, s) = {[stmt, stmt_seq_p]}, (stmt_seq_p,
TABLE([(stmt_sequence, s) = {[stmt, stmt_seq_p]}, (stmt_seq_p,
(10.10.11)
 

> type(cfg4_17,LL1);
 

true (10.10.12)