Автор работы: Пользователь скрыл имя, 15 Января 2014 в 21:33, лабораторная работа
Синтаксис модельного языка М с помощью форм Бэкуса-Наура
<операции_группы_отношения>:: = < > | = | < | <= | > | >=
<операции_группы_сложения>:: = + | - | or
<операции_группы_умножения>::= * | / | and
<унарная_операция>::= not
Синтаксис модельного языка М с помощью форм Бэкуса-Наура
<операции_группы_отношения>:: = < > | = | < | <= | > | >=
<операции_группы_сложения>:: = + | - | 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 |
<действительное>::= <числовая_строка> <порядок> |
<числовая_строка>::= {/ <цифра> /}
<порядок>::= ( 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 |
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
Информация о работе Лабораторная работа по Теории формальных языков (Диаграммы Вирта)