![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Alexandr507 |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 19.7.2009 Репутация: нет Всего: -1 |
Доброго времени суток.
в университете задали такую задачку написать
по поводу присвоения := не ругайтесь раньше времени задание по умолчанию ориентированно на паскаль, но делать можно на любом языке. вообщем я начал разбираться.. как я понял суть такая. непосредственно в самой программе я ввожу например :
нажимаю enter и запускается код который обрабатывает введенное выражение и если есть то находит ошибки указывая их тип. например тут будет ошибка
Нужно описать все эти правила в коде? чтобы программа находила ошибки типа и т п
собственно то чем занимается компилятор когда подчеркивыает значение и высвечивает тип ошибки..Что то типа Сканера Вообщем надеюсь я правильно представляю программу..если правильно..то подскажите..куда копать собственно.. Пока единственное что разумное приходит в голову это с помощью оператора split разделять строку используя в качестве разделителя символ точки с запятой ; и то есть потом с каждым элемента полученного массива работать отдельно ps - я вижу эту программу довольно длинной с тщательным описанием возможных ситуаций..просто может быть существует какой то иной прием Это сообщение отредактировал(а) Alexandr507 - 9.3.2010, 16:07 |
||||||||
|
|||||||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 0 Всего: 11 |
Если я правильно помню, что такое "лексический анализ"
![]() Нужно читать текст посимвольно, и написать "распознаватель" для каждой лексемы. "Распознаватель" может быть в виде отдельной функции или блока в одной, большой, функции. Задача распознавателя -- сдвинуть текущую позицию чтения на длину найденной лексемы. Если распознаватель не сдвинул позицию, значит, он не опознал лексему. Внешний блок или отдельная функция должны просто по очереди пробовать каждый распознаватель и если не подошёл ни один, то выдавать ошибку. Пример ошибки, который ты привёл (int x = false), это не лексическая ошибка, а синтаксическая. Твоя программа не должна находить такие ошибки, так как лексически тут всё правильно. Точно так же, твоя программа не должна проверять парность скобок и т.п. Она просто должна преобразовать массив типа "char" в массив типа "лексема". А вот здесь (x === y;) есть и лексическая ошибка, так как лексемы === не существует. |
|||
|
||||
Sveta12 |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 15.1.2013 Репутация: нет Всего: нет |
Подскажите пожалуйста, вот тоже необходимо написать лексический анализатор на C#, для языка VB. описала все кроме комментарий, в VB только однострочные и начитаютмя либо с ' либо со слова REM. вот именно ошибка как задать, что комментарий...вот код: pattern = "['|REM][\"[^]\"[с]]/[.]*"; foreach (Match match in Regex.Matches(input, pattern, RegexOptions.IgnoreCase)) { tmp = new MToken(); tmp.text = match.Value; tmp.LexClass = "Com"; tmp.pos = match.Index; tmp.Spec = "Comment"; tmp.len = match.Length; list.Add(tmp); input = input.Remove(tmp.pos, tmp.len); string str = new String(' ', tmp.len); input = input.Insert(tmp.pos, str); } т.е первая строчка, надо правильно описать, что идет ' или REM, далее все что угодно до конца строки. |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |