Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 34 стр.

UptoLike

34
4 – символы операций умножения и деления;
5 – символы операций сложения и вычитания.
Заметим, что необходимость разделения бинарных операций на две
группы диктуется их различным приоритетом, играющим важную роль при
генерации постфиксной записи.
Фрагмент программы лексического анализа:
/* prog - файл с транслируемой программой, lex -
выходной файл лексем */
while(!feof (prog))
{
ch = readsym();
/* чтение очередного символа ch с пропуском пробелов
*/
if(isAlpha(ch))
fprintf(lex, "%c %d", ch, 1);
else
if(isDigit(ch))
digit();
/* Процедура чтения числа и вывода его в файл */
else
if(ch == '=')
fprintf(lex, "%c %d", ch, 3);
else
if(ch == '*' || ch == '/')
fprintf(lex, "%c %d", ch, 4);
else
if(ch == '+' || ch == '-')
fprintf(lex, "%c %d", ch, 5);
else
printf("Недопустимый символ языка - %c \n", ch);
}
Контрольные вопросы
1. Дайте определение «лексемы».
2. В чем основная задача лексического анализатора?
3. Какие из перечисленных далее видов информации лексический анализатор
должен включать в выходной файл лексем: символы языка, номер строки для
каждой лексемы,
комментарии к программе, символы форматирования
программы (пробелы, табуляции, переходы на новую строку).
                                                                     34
     4 – символы операций умножения и деления;
     5 – символы операций сложения и вычитания.
     Заметим, что необходимость разделения бинарных операций на две
группы диктуется их различным приоритетом, играющим важную роль при
генерации постфиксной записи.
     Фрагмент программы лексического анализа:
/* prog - файл с транслируемой программой, lex -
выходной файл лексем */
while(!feof (prog))
{
   ch = readsym();
   /* чтение очередного символа ch с пропуском пробелов
*/

    if(isAlpha(ch))
       fprintf(lex, "%c %d", ch, 1);
    else
    if(isDigit(ch))
       digit();
       /* Процедура чтения числа и вывода его в файл */
    else
    if(ch == '=')
       fprintf(lex, "%c %d", ch, 3);
    else
    if(ch == '*' || ch == '/')
       fprintf(lex, "%c %d", ch, 4);
    else
    if(ch == '+' || ch == '-')
       fprintf(lex, "%c %d", ch, 5);
    else
       printf("Недопустимый символ языка - %c \n", ch);
}
                         Контрольные вопросы
1. Дайте определение «лексемы».
2. В чем основная задача лексического анализатора?
3. Какие из перечисленных далее видов информации лексический анализатор
должен включать в выходной файл лексем: символы языка, номер строки для
каждой лексемы, комментарии к программе, символы форматирования
программы (пробелы, табуляции, переходы на новую строку).