Лексический анализатор, помогите пожалуйста

grigoo

Вот такое задание -
Составить набор тестов для тестирования лексического анализатора, разбирающего декларации следующего вида (здесь приведён синтаксис декларации в нотации Бэкуса-Наура):
procedure <return type> <name> ([<param type> <param name>[, ...]]);
<return type>= void | int
<param type>= int | long
<name>, <param name> - идентификаторы, соответствующие требованиям java.
Результат работы лексического анализатора - заключение о том, является ли введенная строка корректной декларацией.
Результат выполнения задания - набор тестовых данных, то есть набор строк, которые необходимы для того, чтобы протестировать такой лексический анализатор. Для каждой строки должен быть указан ожидаемый результат работы программы.
Нотация понятна, не совсем понятно устройство анализатора и что он выдаёт на выходе
Если кто что подскажет, буду благодарна :)

stm7543347


устройство анализатора
-... И в-седьмых, наконец, - рассудительно говорил Эдик, - любому специалисту, а тем более такой авторитетной организации, должно быть ясно, товарищи, что так называемый черный ящик есть не более как термин теории информации, ничего общего не имеющий ни с черным цветом, ни с определенной формой какого бы то ни было реального предмета.

что он выдаёт на выходе

Результат работы лексического анализатора - заключение о том, является ли введенная строка корректной декларацией.

korpa

дерево должен выдавать

obushmelev

Внутреннее устройство анализатора - это не твоя забота. Ты можешь считать, что у тебя есть такой класс:
 
class Parser
{
//! Функция для проверки декларации
/*
* \return true если declaration - правильное объявление функции
*/
bool CheckFunctionDeclaration(string declaration)
{
bool resul = // неважная для тебя проверка строки
return result;
}
}

Соответственно, о тебя требуется написать что-то типа того:
 
void ParserTest
{
Parser p;

// Здесь идут проверки правильных деклараций (явные сравнения с true и false, наверное,
// лучше опустить, я здесь оставил для большей ясности)
assert(p.CheckFunctionDeclaration("procedure void B;") == true);
assert(p.CheckFunctionDeclaration("procedure int B(int a);") == true);
// И остальные варианты: все возвращаемые типы, принимаемые типы, возможность
// использования в именах подчеркиваний, чисел, русских букв и прочей поебени
// возможность указания одного параметра, двух, трех и т.д.



// Здесь идут проверки неправильных деклараций
// Проверка того, что произвольную строку не воспринимает как декларацию
assert(p.CheckFunctionDeclaration("string") == false);
// Здесь ничего не возвращаем
assert(p.CheckFunctionDeclaration("procedure A;") == false);
// Возвращаем неправильный тип
assert(p.CheckFunctionDeclaration("procedure double A;") == false);
// Еще куча проверок обработки неправильных деклараций (неправильные типы,
// неправильные имена, пропущеные запятые, скобки и т.д.)

}

stm7543347

Так сильно лучше. :)

obushmelev

Бля, ты б хоть форматирование в каментах сделал.
Неповеришь, сделал, только все равно неподрассчитал. Щас починим

stm7543347

Оставь примерно шириной с кодовые строки, на любой монитор влезет.
Оставить комментарий
Имя или ник:
Комментарий: