Лабораторная работа по Теории формальных языков (Диаграммы Вирта)

Автор работы: Пользователь скрыл имя, 15 Января 2014 в 21:33, лабораторная работа

Описание работы

Синтаксис модельного языка М с помощью форм Бэкуса-Наура
<операции_группы_отношения>:: = < > | = | < | <= | > | >=
<операции_группы_сложения>:: = + | - | or
<операции_группы_умножения>::= * | / | and
<унарная_операция>::= not

Файлы: 1 файл

ТАФЯ_задание 1 final.docx

— 1.50 Мб (Скачать файл)

Синтаксис модельного языка М с помощью форм Бэкуса-Наура

 

<операции_группы_отношения>:: =  < > | = | < | <= | > | >=

<операции_группы_сложения>:: = + | - | or

<операции_группы_умножения>::= * | / | and

<унарная_операция>::= not

<выражение>::= <операнд>{<операции_группы_отношения> <операнд>}

<операнд>::= <слагаемое> {<операции_группы_сложения> <слагаемое>}

<слагаемое>::= <множитель> {<операции_группы_умножения> <множитель>}

<множитель>::= <идентификатор> | <число> | <логическая_константа> |

                             <унарная_операция>  <множитель> | «(»<выражение>«)»

<число>::= <целое> | <действительное>

<логическая_константа>::= true | false

<идентификатор>::= <буква> {<буква> | <цифра>}

<буква>::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T |

                    U | V | W | X | Y | Z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p

                     q | r | s | t | u | v | w | x | y | z

<цифра>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<пробел>::=

<строка>::={<буква>|<цифра>|<пробел>}

<целое>::= <двоичное> | <восьмеричное> | <десятичное> |

                   <шестнадцатеричное>

<двоичное>::= {/ 0 | 1 /} (B | b)

<восьмеричное>::= {/ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 /} (O | o)

<десятичное>::= {/ <цифра> /} [D | d]

<шестнадцатеричное>::= <цифра> {<цифра> | A | B | C | D | E | F | a | b |

                                             c | d | e | f} (H | h)

<действительное>::= <числовая_строка> <порядок> |

                                   [<числовая_строка>] . <числовая_строка> [порядок]

<числовая_строка>::= {/ <цифра> /}

<порядок>::= ( E | e )[+ | -] <числовая_строка>

<программа> = {/ (<описание> | <оператор>) ( : | переход строки) /} end

<описание>::= dim <идентификатор> { <идентификатор> } : <тип> ;

<тип>::= % | ! | $ |            (целый, действительный, логический)

<оператор>::= <составной> | <присваивания> | <условный> |

     <фиксированного_цикла> | <условного_цикла> | <ввода> | <вывода>

<составной>::= «[» <оператор> { ( : | перевод строки) <оператор> } «]»

<присваивания>::= <идентификатор> as <выражение>

<условный>::= if <выражение> then <оператор> [ else <оператор>]

<фиксированного_цикла>::= for <присваивания>  to <выражение> do <оператор>

<условного_цикла>::= while <выражение>  do <оператор>

<ввода>::= read «(»<идентификатор> {, <идентификатор> } «)»

<вывода>::= write «(»<выражение> {, <выражение> } «)»

комментарии – {}

 

 

P ® TELO end

TELO ® OPIS | OP | OPIS ; TELO | OP ; TELO | OPIS \n TELO | OP \n TELO

OPIS ® ID | ID ; OPIS | ID \n OPIS

ID ®dim NID : % |dim NID : ! |dim NID : $ |dim NID : #

NID ® NID1 | NID, NID1

NID1 ® CIF | ABC | CIF NID1 | ABC NID1

CIF ® 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

ABC ® A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T |

                    U | V | W | X | Y | Z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p

                     q | r | s | t | u | v | w | x | y | z

 

 

OP ® SOP | POP | UOP | FCOP | UCOP | OUT | OUTPUT

SOP ® [SOP1]

SOP1® OP | OP : SOP | OP \n SOP

POP ® NID1 as VIR

UOP ® if VIR  then OP else OP

FCOP ® for POP to VIR do OP

UCOP ® while VIR do OP

OUT ® read(NID)

OUTPUT ® write(VIRN)

VIRN ® VIR | VIRN,VIR

 

VIR ® OPERAND | VIR OGO OPERAND

OPERAND ® SL | OPERAND OGS SL

SL ® MN | SL OGU MN

MN ® NID | NUM | BOOL | UOPER MN | ( VIR )

 

OGO ® < > | = | < | <= | > | >=

OGS ®  + | - | or

OGU  ® * | / | and

UOP ® not

 

NUM ® CNUM | DNUM

BOOL ® true | false

CNUM ® DCNUM | VCNUM | DESCNUM | SHCNUM

 

DCNUM ® DCNUML DCNUMP

DCNUML ® 0 | 1 | DCNUML 0 | DCNUML 1

DCNUMP ® B | b

 

VCNUM ® VCNUML VCNUMP

VCNUML ® 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | VCNUML 1 | VCNUML 2 | VCNUML 3 |

                                        VCNUML 4 | VCNUML 5 | VCNUML 6 | VCNUML 7

VCNUMP ® O | o

 

 

DESCNUM ® DESCNUML DESCNUMP | DESCNUML

DESCNUML ® CIF | DESCNUML CIF

DESCNUMP ® D | d

 

SHCNUM ® CIF SHCNUMD H | CIF SHCNUMD h | CIF H | CIF h

SHCNUMD ® CIF | A | B | C | D | E | F | a | b | c | d | e | f | SHCNUMD CIF | SHCNUMD A | SHCNUMD B | SHCNUMD C | SHCNUMD D | SHCNUMD E |

SHCNUMD F | SHCNUMD a | SHCNUMD b | SHCNUMD c | SHCNUMD d | SHCNUMD e | SHCNUMD f

 

DNUM ® NUMSTR POR | NUMSTR.NUMSTR | NUMSTR POR | NUMSTR.NUMSTR POR

 

NUMSTR ®  CIF | CIF NUMSTR

 

POR ® E+NUMSTR | E-NUMSTR | e+NUMSTR | e-NUMSTR | E NUMSTR |

 e NUMSTR

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Диаграммы Вирта

 

Описание  синтаксиса модельного языка М с помощью диаграмм Вирта представлено на следующих рисунках.

 

цифра  

1


0

5

4

9

6

2

7

3

8

                                   


 

 

 

 

 

 

g


a

b

c

d

e

v

t

w

h

i

j

k

l

m

n

o

u

p

q

r

s

x

y

z

f


буква

 

 

 

 

 

 

 

 

 

 

 

G


A

B

C

D

E

V

T

W

H

I

J

K

L

M

N

O

U

P

Q

R

S

X

Y

Z

F


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

идентификатор

буква


цифра

буква


 

 

 

 

 

 

Ключевое слово

as


end

read

write

if

then

else

while

do

true

false


 

 


 

 

 

 

 

 

 

 

 

 

 

 

true


false


 

Логическая константа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

разделитель


-


:=


(



<>



*


!.


)




,


=


/


{




;


>


#


}



 

:


<


%


+



<=



>=


]


[





присваивания


условный

цикла

составной

ввода

вывода


 

оператор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#



описание


dim


идентификатор


:

 

!

%

,


 

 

 

 

 

 

Программа

 

as


выражение


идентификатор


присваивания



if


then

else

выражение

оператор

оператор



условный

 

 

 

while


do

выражение

оператор

цикла


 

 

 

 

[


]

оператор

:

составной


 


 

 

\n



 

 

 

 

 

 

 

,




read


(

)

идентификатор

ввода


 

 

,



write


(

)

выражение


вывода

 

 

 

 

 

 

 

 

 

выражение

 

 

 

Операнд

           

 

 

 

 

 

 

 

 

Слагаемое

        

 

 

 

Множитель

 

Двоичное 

 

Восьмеричное

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шестнадцатеричное

Десятичное 

 

 

 

 

 

 

Действительное

 

Порядок


Числовая строка




Числовая строка


.




 

 

 

 

Числовая строка

Цифра




 

 

 

 

+


-


E


Порядок



 

Числовая строка




 

e



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Примеры программ:

 

Примеры программ:

{Программа 1}

dim a , b: %

(read) a

(read) b

a as a*b

(write) a

end

 

{Программа 2}

dim a: %

read (a)

if  a<5 then a as a – 1

else [a as a+1]

write (a)

end

 

{Программа3}

dim a, b: %

read(a)

b as a+10

for (a as a+1) to a<b do write (a)

end

 

{Прогр4 }

dim a, b : %

a as 0

while true do [read(b): a as a+b: write (a)]

end

 

{Прогр5 факториал}

dim a, b, f : %

read (a)

b as a – (a - 1)

while a<>b do [f as a*b: b+1]

write (f)

end


Информация о работе Лабораторная работа по Теории формальных языков (Диаграммы Вирта)