Побудова алгоритму LA(1)-аналізу, Детальна інформація
Побудова алгоритму LA(1)-аналізу
–
\x02DC
\x245B\x5C00$\x845E\x02D0\x1000конати оператор, відповідний до ui:
if ch in T1 then оператор-для-u1 else
…
if ch in Tm then оператор-для-um else
error.
Якщо Y має вигляд [u], T=first(u), то за виконання умови ch\xF0CE T треба виконати оператор, відповідний до u:
if ch in T then оператор-для-u.
Якщо Y має вигляд {u}, T=first(u), то за виконання умови ch\xF0CE T треба повторювати виконання оператора, відповідного до u:
while ch in T do оператор-для-u.
Зокрема, коли ланцюжок u починається терміналом, тобто u=xu1, де x\xF0CE X, то цикл має вигляд
while ch = x do
begin
ch := getc;
оператор-для-u1
end.
Оператори, відповідні до u, u1, … , um , записуються за цими ж правилами.
2. Побудова аналізатора арифметичних виразів
Розширена LA(1)-граматика G01 із продукціями E\xF0AE T{+T}, T\xF0AE F{*F}, F\xF0AE (E)|a породжує мову арифметичних виразів. Згідно з наведеними правилами запишемо процедури E, T, F:
procedure E;
begin
T;
while ch = '+' do
begin ch := getc; T end
end;
procedure T;
begin
F;
while ch = '*' do
\x02DC
\x245B\x5C00$\x845E\x02D0\x1000конати оператор, відповідний до ui:
if ch in T1 then оператор-для-u1 else
…
if ch in Tm then оператор-для-um else
error.
Якщо Y має вигляд [u], T=first(u), то за виконання умови ch\xF0CE T треба виконати оператор, відповідний до u:
if ch in T then оператор-для-u.
Якщо Y має вигляд {u}, T=first(u), то за виконання умови ch\xF0CE T треба повторювати виконання оператора, відповідного до u:
while ch in T do оператор-для-u.
Зокрема, коли ланцюжок u починається терміналом, тобто u=xu1, де x\xF0CE X, то цикл має вигляд
while ch = x do
begin
ch := getc;
оператор-для-u1
end.
Оператори, відповідні до u, u1, … , um , записуються за цими ж правилами.
2. Побудова аналізатора арифметичних виразів
Розширена LA(1)-граматика G01 із продукціями E\xF0AE T{+T}, T\xF0AE F{*F}, F\xF0AE (E)|a породжує мову арифметичних виразів. Згідно з наведеними правилами запишемо процедури E, T, F:
procedure E;
begin
T;
while ch = '+' do
begin ch := getc; T end
end;
procedure T;
begin
F;
while ch = '*' do
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021