Форум программистов, компьютерный форум CyberForum.ru

лексический анализатор на С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.95
Petya
0 / 0 / 0
Регистрация: 10.09.2010
Сообщений: 3
10.09.2010, 19:52     лексический анализатор на С++ #1
Написать лексический анализатор на С++:
разделители: , . ;
бинарные операции: + - * /
унарные операции: - знак числа
идентификаторы: a|b|...|z
служебные слова: 'VAR', 'BEGIN', ‘END’,
константы: 0|1...|9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
void main()
{
    FILE *f1,*f2;
    f1=fopen("D:/1.txt","r");
    f2=fopen("D:/2.txt","w");
    while (feof(f1)==0)
    {
        int ch=getc(f1);
        if(isalpha(ch))
            fprintf(f2,"%c %d \n",ch,2);
        else
            if(isdigit(ch))
                fprintf(f2,"%c %d \n",ch,3);
            else
                if(ch==':=')
                    fprintf(f2,"%c %d \n",ch,10);
                else
                    if(ch=='var')
                        fprintf(f2,"%c %d \n",ch,1);
                    else
                        if(ch=='-'||ch=='+'||ch=='*'||'/')
                            fprintf(f2,"%c %d \n",ch,9);
                        else
                            if(ch==';')
                                fprintf(f2,"%c %d \n",ch,6);
                            else
                                if(ch=='-')
                                    fprintf(f2,"%c %d \n",ch,8);
                                else
                                    if (ch==',')
                                        fprintf(f2,"%c %d \n",ch,5);
                                    else
                                        if (ch=='.')
                                            fprintf(f2,"%c %d \n",ch,4);
                                else
                                    printf("недопустимый символ языка - %c \n",ch);
    }
    fclose(f1);
    fclose(f2);
}
что здесь не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2010, 19:52     лексический анализатор на С++
Посмотрите здесь:

Лексический анализатор C++
C++ Лексический анализатор текста
C++ Лексический анализатор
лексический анализ..... C++
C++ лексический анализ
C++ Составить автоматную грамматику и на её основе реализовать лексический анализатор языка
Лексический анализатор языка лисп C++
Лексический анализатор. Вывести типы констант, идентификаторов и специальных знаков C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
illuminati
20 / 20 / 4
Регистрация: 14.06.2010
Сообщений: 108
10.09.2010, 20:00     лексический анализатор на С++ #2
переменная ch у тебя int, а должна быть char
это из моих скудных познаний на Си
Impuls1989
 Аватар для Impuls1989
6 / 6 / 0
Регистрация: 08.09.2010
Сообщений: 35
10.09.2010, 20:04     лексический анализатор на С++ #3
Если Вы будете продолжать в том же духе, у Вас распухнут глаза и взорвется мозг... Почитайте про обратную польскую запись. А на if-ах Вы далеко не уедите.

Добавлено через 1 минуту
Цитата Сообщение от illuminati Посмотреть сообщение
переменная ch у тебя int, а должна быть char
это из моих скудных познаний на Си
char по сути и есть int. С этим все нормально. Там есть сравнение:
C
1
2
if(ch==':=')
  fprintf(f2,"%c %d \n",ch,10);
Тут тоже ошибка
Yandex
Объявления
10.09.2010, 20:04     лексический анализатор на С++
Ответ Создать тему
Опции темы

Текущее время: 11:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru