Елементи синтаксичного аналізу, Детальна інформація
Елементи синтаксичного аналізу
if ch in Sk then оператор-для-wk else
error
end
Зокрема, якщо Si містить лише один символ x, то замість умови chinSi можна записати ch = x.
Праві частини розширених граматик є виразами, складеними з послідовностей символів алфавіту X і метасимволів, якими є дужки (), [], {} та символи |. Розглянемо праву частину v розширеного правила як послідовність виразів Y1 … Yk , в якій Yi є або символом з X\xF0C8 N, або виразом вигляду (u), [u], чи {u}, що не міститься всередині інших дужок, де u – послідовність нетерміналів, терміналів и дужок. За правою частиною v будується складений оператор із послідовністю операторів, відповідних до Y1,…,Yk. Нехай Y позначає один із виразів Y1,…,Yk. Відповідний оператор визначається виглядом Y за наступними правилами.
Якщо Y є першим терміналом Y1, то оператором є
ch:=getc.
Якщо Y є терміналом, але не першим у ланцюжку v, то оператор має вигляд
if ch = Y then ch:=getc else error,
тобто треба перевірити збігання поточного символу з Y та перейти до наступного символу.
Якщо Y є нетерміналом, то оператором є виклик процедури
Y.
Якщо Y має вигляд (u1|…|um) і Ti позначає first(ui) при i=1,…,m, то треба визначити, до якої з множин Ti належить поточний символ, і виконати оператор, відповідний до 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 , записуються за цими ж правилами.
3.2. Побудова аналізатора арифметичних виразів
Розширена LA(1)-граматика G01 із продукціями E\xF0AE T{+T}, T\xF0AE F{*F}, F\xF0AE (E)|a породжує мову арифметичних виразів. Згідно з наведеними правилами запишемо процедури E, T, F:
error
end
Зокрема, якщо Si містить лише один символ x, то замість умови chinSi можна записати ch = x.
Праві частини розширених граматик є виразами, складеними з послідовностей символів алфавіту X і метасимволів, якими є дужки (), [], {} та символи |. Розглянемо праву частину v розширеного правила як послідовність виразів Y1 … Yk , в якій Yi є або символом з X\xF0C8 N, або виразом вигляду (u), [u], чи {u}, що не міститься всередині інших дужок, де u – послідовність нетерміналів, терміналів и дужок. За правою частиною v будується складений оператор із послідовністю операторів, відповідних до Y1,…,Yk. Нехай Y позначає один із виразів Y1,…,Yk. Відповідний оператор визначається виглядом Y за наступними правилами.
Якщо Y є першим терміналом Y1, то оператором є
ch:=getc.
Якщо Y є терміналом, але не першим у ланцюжку v, то оператор має вигляд
if ch = Y then ch:=getc else error,
тобто треба перевірити збігання поточного символу з Y та перейти до наступного символу.
Якщо Y є нетерміналом, то оператором є виклик процедури
Y.
Якщо Y має вигляд (u1|…|um) і Ti позначає first(ui) при i=1,…,m, то треба визначити, до якої з множин Ti належить поточний символ, і виконати оператор, відповідний до 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 , записуються за цими ж правилами.
3.2. Побудова аналізатора арифметичних виразів
Розширена LA(1)-граматика G01 із продукціями E\xF0AE T{+T}, T\xF0AE F{*F}, F\xF0AE (E)|a породжує мову арифметичних виразів. Згідно з наведеними правилами запишемо процедури E, T, F:
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021