Синтаксический анализатор на С++ |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Синтаксический анализатор на С++ |
Krjuger |
19.11.2009 18:51
Сообщение
#1
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Суть задания в том чтобы разработь класс для синтаксического анализатора арифметических выражений.
В отладчике выдается 2 ошибки: 1.error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup MSVCRTD.lib 2.fatal error LNK1120: 1 unresolved externals Что делать ума не приложу. |
volvo |
19.11.2009 19:01
Сообщение
#2
|
Гость |
Цитата Что делать ума не приложу. Создать консольное приложение, а не Win32-проект. У тебя компилятор не может найти обязательную для Win-приложения функцию WinMain, ибо нет ее в твоем проекте. |
Krjuger |
19.11.2009 19:06
Сообщение
#3
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Ну я создаю пустой win32 console application и там .срр файл,кстати использую MVS.А тогда какой консольное приложение мне необходимо создать?Мда создал пустой проект и нормально собралось(как то тупо получилось.
Сообщение отредактировано: Krjuger - 19.11.2009 19:11 |
Krjuger |
19.11.2009 20:37
Сообщение
#4
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Я чуть изменил код,
При использовании данного примера проиходит ошибка,проблема в том что именованое пространство func как то неверно сравнивается с моим текущим значением tmp... |
volvo |
19.11.2009 21:09
Сообщение
#5
|
Гость |
Цитата //вот здесь впесто того чтобы пропустить прога переходит к Result(5, tmp),хотя не должна этого делать. Здесь - не должна (у меня и не переходит, но я тестировал с GCC, Майкрософтовского компилятора не держу), чуть ниже - здесь:case 6:- уже должна. Может быть VC++ так оптимизирует? Кстати, я бы на твоем месте чуть-чуть переписал бы. Вот так, например: const char *func = "cos sin tg ctg ln log sign exp\0"; |
Krjuger |
19.11.2009 21:46
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Не, у меня это происходит именно в третьем case ,а
Цитата const char *func = "cos sin tg ctg ln log sign exp\0"; пишет невозможно конвертировать const char to const char *Цитата Может быть VC++ так оптимизирует? у меня такое ощущение,что оно разбило эти функции на элементы и сверяет с каждый,в итоге я проверяю не с нужными мне функциями,а с множеством элементов,образованных этими функциями. Сообщение отредактировано: Krjuger - 19.11.2009 21:52 |
volvo |
19.11.2009 21:56
Сообщение
#7
|
Гость |
Цитата пишет невозможно конвертировать const char to const char * Они что там, в MS вообще с ума посходили? Теперь понятно, почему у них такие поделки. То, что Стандарт обязывает такую конструкцию работать - это им плевать, их компилятор, значит, не пропускает? В топку его... |
Krjuger |
19.11.2009 22:00
Сообщение
#8
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Да я бы сам на другом написал бы,но препод принимать все равно на MVS будет,а лишние всплывающие косяки мне не нужны.Кстати strstr тоже отказывается потом работать.
Хах короче данная проблема выличилась,оказывается надо так:
Но сама проблема с 3 кейсом не пропала(((( Сообщение отредактировано: Krjuger - 19.11.2009 22:13 |
Krjuger |
19.11.2009 23:11
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Так проблема с 3 кейсом тоже отпала,но появилась новая....
если я делаю
но вылазит какая то дремучая ошибка доступа,если я поменяю temp tmp местами то все нормарьно работает,но будет не то что мне нужно если создам третью переменную char *temp2, и использую
То мне пишет что temp2 используется без инициализации. |
volvo |
19.11.2009 23:14
Сообщение
#10
|
Гость |
Стоп... А с чего ты решил, что
Цитата if (strstr(func,tmp) != 0) //вот здесь впесто того чтобы пропустить прога переходит к Result(5, tmp),хотя не должна этого делать. |
Krjuger |
19.11.2009 23:19
Сообщение
#11
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Не ,его как раз быть не должно по задумке,потому что "х" не является функцией обьявленной в множестве функций,и должно обрабатываться как операнд.наверно мне надо как то по другому обьявить множестов функций,чтобы более чтрого проверялось наличие.
Сообщение отредактировано: Krjuger - 19.11.2009 23:21 |
volvo |
19.11.2009 23:21
Сообщение
#12
|
Гость |
Цитата Не ,его как раз быть не должно по задумке,потому что "х" не является функцией обьявленной в множестве функций А ты это что, уже объяснил функции strstr? Ей по фигу, что в каком множестве содержится. Она ищет вхождения строк. Точка. Больше - ничего. А строка "x" в строке "cos sin tg ctg ln log sign exp" присутствует по-любому. Так что переход быть ДОЛЖЕН. Или переписывай strstr так, чтоб она знала, что есть твои "множества функций".Добавлено через 1 мин. Цитата наверно мне надо как то по другому обьявить множестов функций,чтобы более чтрого проверялось наличие. Наверное... Например, в строке, содержащей функции, первый и последний - пробелы. И сам tmp тоже обрамить пробелами с двух сторон. Тогда будет искаться точное соответствие. |
Krjuger |
19.11.2009 23:42
Сообщение
#13
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
С проверкой я разобрался теперь все нормально рабоатет,но вот проблема с выводом результата все еще остается.
Все,сделал,спасибо,осталось отловить различные случаи,потом скину конечный результат... Сообщение отредактировано: Krjuger - 20.11.2009 0:58 |
Krjuger |
24.11.2009 19:12
Сообщение
#14
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
В общем помучавшись мальца я пришел к такому варианту:
Если у кого то есть желание и возможность то потестируйте его на прочность и если возникнут неверные результаты просьба выложить их суда,чтобы я исправил. cos sin tg ctg ln log sign exp- список допустымых функций. |
Текстовая версия | 12.06.2024 19:39 |