Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 10:11   #1
Анастасия91
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 10
По умолчанию как изменить эту программу чтобы она заработала?

помогите с программой, как сделать так чтобы эта программа заработала в microsoft visual studio 2008? что нужно в ней изменить и как?

//для элемента var раздела языка программирования Паскаль:
//1 построить грамматику
//2 преобразовать грамматиу к LL(1)-виду, если она таковой не является.
для этого нужно использовать введение дополнительных нетерминальных символов,
//левой факторизации
//3 пронумеровать правила грамматики
//4 для правил, имеющих совпадающие левые части построить множества стартовых символов или множества символов-последователей
(для правил с пустым символом в правой части).
убедиться, что множества для одинаковых нетерминалов в левой части правил имеют непересекающиеся правые части
//5 разработать программу синтаксического анализа на основе построенной грамматики использованием нисходящего метода рекурсивного спуска.
//использовать рекурсивные вызовы функций
//6 для каждого нетерминала создать отдельную функцию

//Грамматика:
//G(T,N,P,DECL),
//где Т-множество терминальных символов
// N-множество нетерминальных символов
// P- множество правил грамматики
// DECL-целевой символ грамматики
// T={'a','b','c',...,'z',',',':',';', var,real,integer,byte}
// N={DECL,SPISOK,NAME,DOP,TIP}

// P: МножестваFIRST Множества FOLLOW
// 1) DECL -> var SPISOK : TIP;
// 2)SPISOK -> NAME DOP
// 3)DOP ->, SPISOK | {,}
// 4)SL (это лямбда) {:}
// 5)TIP -> real | {real}
// integer | {integer}
// byte {byte}
// 6)NAME -> a | b| ... |z

Код:
#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <conio.h>
#include <string.h>

char token[80];
int SPISOK(), NAME(), DOP(), TIP();
FILE *fin;

void lex()
{ fscanf(fin,"%s",token);
return;
}

int DECL()
{ if(strcmp(token,"var")!=0)
return 0;
lex();
if(SPISOK() == 0)
return 0;
if(strcmp(token,":")!=0)
return 0;
lex();
if(TIP() == 0)
return 0;
lex();
if(strcmp(token,";")!=0)
return 0;
return 1;
}

int SPISOK()
{ if(NAME() == 0)
return 0;
lex();
if(DOP() == 0)
return 0;
return 1;
}

int NAME()
{ if((strcmp(token,"a")<0) || (strcmp(token,"z")>0))
return 0;
return 1;
}

int DOP()
{ if (strcmp(token,",")==0)
	{ lex();
	SPISOK();
	}
else
if(strcmp(token,":")==0)
return 1;
else
return 0;
}

int TIP()
{ if((strcmp(token,"real")==0) || 
     (strcmp(token,"integer")==0) ||
     (strcmp(token,"byte")==0))
return 1;
return 0;
}

void main()
{ int d;

fin=fopen("all_token.dat","r");
lex();
d=DECL();
fclose(fin);
if(d==0)
printf("Error !\n");
else
printf("GOOD - Declaration \n");
while(1)
if (getch() == 27)
break;
return;
}

Последний раз редактировалось Stilet; 12.12.2010 в 12:17.
Анастасия91 вне форума Ответить с цитированием
Старый 12.12.2010, 12:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А какие ошибки она выдает при компиляции?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2010, 20:21   #3
Анастасия91
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 10
По умолчанию

ошибки при запуске программы:
'cpo3.exe':loaded 'C:\windows\system32\msctf.dll'
'cpo3.exe':loaded 'C:\programs files\scansoft\omnipagese4.0\ophook se4.dll'
'cpo3.exe':loaded 'C:\windows\system32\version.dll'
'cpo3.exe':loaded 'C:\windows\system32\ole32.dll'
'cpo3.exe':loaded 'C:\windows\system32\oleaut32.dll'
через пару минут:
'cpo3.exe': Loaded 'C:\WINDOWS\system32\ole32.dll'
'cpo3.exe': Loaded 'C:\WINDOWS\system32\oleaut32.dll'
'cpo3.exe': Unloaded 'C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2010\mzvkbd3.dll'
The thread 'Win32 Thread' (0x53c) has exited with code 0 (0x0).
'cpo3.exe': Unloaded 'C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 2010\kloehk.dll'
The thread 'Win32 Thread' (0x954) has exited with code 0 (0x0).

на протяжении всего времени висит табличка:
microsoft visual c++ debug library

debug assertion failed
program:'cpo3.exe'
file: f:\\dd\vctools\crt_bld\self_x86\crt \src\fscanf.c
line:52

expression: (stream !=NULL)
for information on how your program can cause an assertion failure, see the visual c++ documentation on asserts
Анастасия91 вне форума Ответить с цитированием
Старый 12.12.2010, 22:02   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Анастасия91
у вас ассерт
fin=fopen("all_token.dat","r");

файл существует? если нет, fopen его не создаст, ибо вы его открываете с режимом только для чтения. причем, дальше не проверяете, корректно ли открылся файл. и во время вызова fscanf упадете

по алгоритму ничего не скажу. по коду - он ужасен чуть более, чем полностью
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.12.2010, 07:39   #5
Анастасия91
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 10
По умолчанию

как организовать корректное открытие файла (файл уже был создан, all_token.dat) и чтобы был вывод результата ввиде грамматик на экран и сохранение в другой файл тех же грамматик, которые использовала программа в свой работе
Анастасия91 вне форума Ответить с цитированием
Старый 13.12.2010, 07:39   #6
Анастасия91
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 10
По умолчанию

помогите пожалуйста
Анастасия91 вне форума Ответить с цитированием
Старый 13.12.2010, 08:05   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Сообщение от Анастасия91 Посмотреть сообщение
как организовать корректное открытие файла
Для этого надо дискриптор файла проверять! Допустим
Вот вы открываете файл
fin=fopen("all_token.dat","r");
То в случае удачи fopen вернёт указатель(дискриптор) на файл!
Иначе вернёт NULL
Отсюда проверка такая
Код:
if ((fin=fopen("all_token.dat","r")) != NULL) //То всё хорошо можно работать
else //файл открыть нельзя
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303

Последний раз редактировалось Hacker19_90; 13.12.2010 в 08:20.
Hacker19_90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПЕРЕДЕЛАЙТЕ ПРОГРАММУ ТАК, ЧТОБЫ ОНА НИКОГДА НЕ ВЫВОДИЛА БОЛЕЕ 10 ЧИСЕЛ В ОДНОЙ СТРОКЕ D_bl_M Общие вопросы C/C++ 6 05.06.2010 06:54
Какую программу можно написать на делфи чтобы она пользовалась большим спросом Xander Свободное общение 8 03.07.2008 16:11
Как сделать программу, чтобы она запускалась везде? grenles Общие вопросы C/C++ 3 11.06.2008 21:10
Возможно создать программу, чтобы она взламывала соеденение по мобильному телефону niva622 Свободное общение 3 01.05.2007 09:22