Вы находитесь на странице: 1из 11

Практическое занятие 2

Синтаксис и семантика
Используя грамматику для арифметических выражений:
<E> :: = <E> + <T> | <E> – <T> | <T>
<T> :: = <T> * <F> | <T> / <F> | <F>
<F> :: = number | name | (<E>)
где <E> — выражение, <T> — терм, <F> — фактор,
изобразить дерево разбора для следующих арифметических
выражений:
1) 2 + 3
2) (2 + 3)
3) 2 + 3 * 5
4) (2 + 3) * 5
5) 2 + (3 * 5)

2
Грамматика языка программирования в BNF:
<SL> :: = <S> | <S> ; <SL>

<S> :: = <var> := <expr> |


if <в_отн> then <SL> |
if <в_отн> then <SL> else <S> |
while <в_отн> do <S> |
begin <SL> end

<expr> :: = <expr> + <var> |


<expr> – <var> |
<var>

<в_отн> :: =   <var> = <var> |


<var> <> <var>

<var> ::= a | b | c | x | y | z
<const> ::= 0 | 1 | 2

3
Создать дерево разбора для каждой из конструкций
1.while a = 1 do x:= y + 1
2.begin y:= a + b end
3.if a = 0 then if b <> 1 then x:= y + 1; z := a else x:= y – 1

4
Переписать два правила в BNF как одно правило в ЕBNF
1.<SL> :: = <S> | <S> ; <SL>
2.<expr> :: = <expr> + <var> | <expr> – <var>
3.<S> :: = if <в_отн> then <S> | if <в_отн> then <S> else <S>

5
  Таблица операций языка Паскаль имеет следующий
вид:

Все операции, отображенные в таблице, имеют левую


ассоциативность (группировка элементов осуществляется
слева направо). Все операции в одной строке имеют
одинаковый приоритет.
Записать грамматику выражений для языка Паскаль

<фактор> :: = not <фактор> | name | number | (<выражение_отношения>)

6
 Используя команды виртуальной машины, дайте
операционное семантическое определение для
цикла for-to языка Паскаль
for i := first to last do…

i := first
loop: if i > last goto out

...
i := i + 1
  goto loop
 out:

7
Вычислить слабейшее предусловие для оператора
присваивания и постусловия.
Дано:
оператор присваивания: a := 2 * (b – 1) – 1
постусловие: {a > 0}
Дано:
оператор присваивания: b := (c + 10) / 3
постусловие: {b > 6}
Дано:
оператор присваивания: a := a + 2 * b – 1
постусловие: {a > 1}
Дано:
оператор присваивания: x := 2 * y + x – 1
постусловие: {x > 11}

8
Вычислить слабейшее предусловие для
последовательности операторов присваивания и
ее постусловия.
Дано:
оператор присваивания: a := 2 * b + 1
оператор присваивания: b := a – 3
постусловие: {b < 0}

Дано:
оператор присваивания: a := 3 * (2 * b + a)
оператор присваивания: b := 2 * a – 1
постусловие: {b > 5}

9
Доказать, что следующая программа корректна:

{y = Vy and x = Vx}
temp = x;
x = y;
y = temp;
{x = Vy and y = Vx}

10
  
СПАСИБО ЗА ВНИМАНИЕ

11