ля обробки тексту програми або повідомлення про лексичні по- милки. Типи лексем визначити самостійно. Це можуть бути:
-зарезервовані слова (int, if, else, while, switch, case
тощо);
-ідентифікатори;
-числові константи (цілі й дійсні числа);
-літерні константи;
-коди операцій (+, -, *, =, ==, <,> тощо);
-роздільники ({, ,, ;, } тощо).
Підмножина мови С містить:
a) дані типу int, описи змінних, оператори присвоюван- ня в довільній послідовності; операції +, –, *, = =, !=, <, >;
б) те саме, що й у а), але з доданими операторами if та if-else довільної вкладеності й у довільній послідовності;
в) те саме, що й у б), тільки оператори if та if-else за- мінити на оператори while;
г) те саме, що й у б), тільки оператори if та if-else за- мінити на оператори for;
д) те саме, що й у б), тільки оператори if та if-else за- мінити на оператори do-while;
е) те саме, що й у а), але з доданими типами float і ма- сивами зазначених типів.
15. Реалізувати синтаксичний аналізатор для описаних у впра- ві 14 фрагментів мови С методом рекурсивного спуску.
16. Побудувати синтаксичний аналізатор для даного поняття й там, де це можливо, обчислити значення заданого виразу. Вхідний потік вводиться з клавіатури. Поняття задано в лінійній СД (жирні літери-дужки є метасимволами, див. підрозд. 1.4.4):
1)<список-списків> ::= <список> {; <список> } <список> ::= <літера> {, <літера> }
2)<дійсне-число> ::= <ціле-число> . <ціле-без-знака> |
<ціле-число> [. <ціле-без-знака> ] Е<ціле-число> <ціле-без-знака> ::= <цифра>{<цифра> }
|
|
|
|
<ціле-число> |
::= [- | + ] |
<ціле-без-знака> |
3) <сума> |
::= <ціле> {<знак-операцїї> <ціле> } |
<знак-операції> |
::= - | + | * |
<ціле> |
::= <цифра> { <цифра> } |
4) <дужки> |
|
::= <квадратні> | <круглі> |
<квадратні> ::= В | [<круглі> <круглі>] |
<круглі> |
::= А | (<квадратні> <квадратні>) |
5) <простий-вираз> |
::= <простий-ідентифікатор> | |
(<простий-вираз> <знак-операції> <простий-вираз> ) |
<знак-операції> |
::= - | + | * |
|
<простий-ідентифікатор> ::= <літера>