main => exp([a,'*','(',a,'+',a,')'],[]). % E -> E + T | E - T | T table exp(Si,So) ?=> exp(Si,S1), S1 = ['+'|S2], term(S2,So). exp(Si,So) ?=> exp(Si,S1), S1 = ['-'|S2], term(S2,So). exp(Si,So) => term(Si,So). % E -> T * F | T / F | F table term(Si,So) ?=> term(Si,S1), S1 = ['*'|S2], factor(S2,So). term(Si,So) ?=> term(Si,S1), S1 = ['/'|S2], factor(S2,So). term(Si,So) ?=> factor(Si,So). % F -> ( E ) | a factor([a|Si],So) => So = Si. factor(['('|Si],So) => exp(Si,S1), S1 = [')'|So]. /* % E -> T E' exp(Si,So) => term(Si,S1), ex_prime(S1,So). % E' -> + T E' | - T E' | e ex_prime(['+'|Si],So) => term(Si,S1), ex_prime(S1,So). ex_prime(['-'|Si],So) => term(Si,S1), ex_prime(S1,So). ex_prime(Si,So) => So = Si. */