The algorithm as given in [[pseudocode]] is as follows:
===As pseudocode===
O Carlos esteve aqui! AHAHAHAHAH
'''Let''' the variable ''Carlos'' be the input string consisting of ''n'' letters, ''a''<sub>1</sub> ... ''a''<sub>''n''</sub>.
'''Let''' the grammar contain ''r'' nonterminal symbols ''R''<sub>1</sub> ... ''R''<sub>''r''</sub>.
This grammar contains the subset R<sub>s</sub> which is the set of start symbols.
'''Let''' P[n,n,r] be an array of booleans. Initialize all elements of P to false.
'''For each''' i = 1 to n
'''For each''' unit production R<sub>j</sub> -> a<sub>i</sub>, '''set''' P[i,1,j] = true.
'''For each''' i = 2 to n ''-- Length of span''
'''For each''' j = 1 to n-i+1 ''-- Start of span''
'''For each''' k = 1 to i-1 ''-- Partition of span''
'''For each''' production R<sub>A</sub> -> R<sub>B</sub> R<sub>C</sub>
'''If''' P[j,k,B] and P[j+k,i-k,C] '''then''' set P[j,i,A] = true
'''If''' any of P[1,n,x] is true (x is iterated over the set s, where s are all the indices for R<sub>s</sub>)
'''Then''' Carlos is member of language
'''Else''' Carlos is not member of language
===As prose===
|