Страница 3 из 4

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 24 фев 2015, 15:57
Kirill_V
Вахрушев Кирилл
Буду писать на С++,анализатор postscript.

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 28 фев 2015, 11:29
VictorovichKseniya
Скажите пожалуйста, А вот как разобрать например такую строку? Точнее как должен выглядеть ее разбор?
position:relative;
position лексема
и relative тоже
но если свойство будет типо значения или текста то уже не считается лексемой. как быть?

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 28 фев 2015, 15:52
vva
лексемы тут:
position
:
relative
;

свойство типо текста, это
font-family: "CPW-normal";
?

тогда лексемы:
font-family
:
"CPW-normal"
;

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 01 мар 2015, 06:47
VictorovichKseniya
Тогде в таблице, чем должно быть написано
position
:
relative
;
?
чем должны являться эти лексемы? Вопрос глупый но все же ответьте пожалуйста.

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 01 мар 2015, 13:22
vva
ну это всё ключевые слова (literal ы из списка) и операторы так то

literal другими словами

т.е. у вас (примерно, без деталей, упрощённо)
literal ::= <буква>{<буква>|<цифра>}+
string ::= <кавычка>{<любой символ>}*<кавычка>
number ::= {<цифра>}+[<точка>{<цифра>}+]
operator ::= ':' | '{' | '}' | ';'

ну там у вас конечно ещё единицы измерения могут быть, но вы уж сами разбирайтесь
будет у вас цифра с единицей измерения одной лексемой или несколькими

в общем на самом деле с терминологией тут всё не очень хорошо, в разных
источниках разные вещи могут называться разными словами

я бы рекомендовал ориентироваться на терминологию стандартных утилит дефакто
lex/yacc
http://dinosaur.compilertools.net/lex/index.html
и по русски:
http://rus-linux.net/lib.php?name=/MyLD ... howto.html

хотя они уже очень старые и есть уже более современный и мощный
( http://en.wikipedia.org/wiki/ANTLR )

в общем если у вас типы лексем будут не совсем так называться - оценки снижать не буду
тут возможны разные подходы
чтобы вам (и мне) из низ выбирать, нужно пописать такие вещи несколько раз "с нуля"

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 03 апр 2015, 11:15
vva
Яковлев, как приславший хоть что то первым получает 4 за первую лабораторную работу

замечания которые я ему сделал, предлагаю почитать и всем остальным, ибо я уверен что такие ошибки у большинства, если не у всех..

1. мешанина разных способов работы с файлами fputs, << и т.п.
не рекомендую..
в данном случае достаточно fprintf

2. мешанина пробелов и символов табуляции
обычно практикуется либо одно либо другое..
будете так кодить - будут проблемы

3. зачем то имена файлов пробили прямо константами..
обычно их подают в виде аргументов командной строки
(функции main)
а при отладке обычно в среде есть настройки, с какими аргументами командной строки запускать..

4. fseek(f,3,0);//пропуск 3 байт т.к. UTF-8

вы же не думаете, что файл без блока BOM НЕ является файлом в кодировке utf-8
файл без BOM вполне корректно откроется в блокноте и большинстве систем

более того, например в файлах с исходным текстом php BOM бывает причиной проблем..

я предполагал вообще то что вы прочитаете первые 3 байта и решите по ним, используется BOM или нет..

кстати, в том файле что вы приложили к своей лабораторной как раз BOM отсуствует и вы пропускаете просто 3 пробела..

более того.. ваш файл не содержит русских символов от слова совсем
и по коду я просто вижу, что ваша программа с ними работать и не сможет..

кстати частично это является следствием того, что вы выбрали чрезвычайно древний инструмент..

5.

fgets(readedString,255,f); //чтение строки

а что если строка длиннее 255 символов?
ваша программа будет глючить..

..

8.

//проверка на комментарий
int pos_begin_comment=text.Pos("//");//занесем позицию # если не 0 то коммент есть в строке

а если // у меня в строковой константе? например "//" ?
вы мне отрежете всё что после него?

комментарии нужно выцеплять таким же перебором посимвольно как и остальные лексемы..

9.

for(int i=1;i<=text.Length();i++)//перебор всей строки текста

я правда первый кто говорит вам о том что во всех нормальных языках программирования, включая c++ индексы в массиве начинаются с нуля?

таким образом вы тупо всегда пропускаете первый символ, что неверно!

10.

temp2=text.SubString(p1+1,i-p1-1);//сохранение текста символьной строки

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

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 03 апр 2015, 12:08
vva
Суставова тоже прислала первую лабораторную..

это очень удобно когда текст в работах разных студентов совпадает больше чем наполовину

не нужно проверять места, замечания по которым уже написал

и приятно видеть профессиональный рост человека, который в вашей группе пишет лабораторные работы..

есть даже повод надеяться что хоть кто то хоть чему то учится

суставова_яковлев_diff.png

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 03 апр 2015, 12:40
vva
продолжаем заочное эпистолярное общение с неизвестным писателем лабораторных работ..

1.

//поставлено спецом в конце цикла!!!! ибо первую строку не нужно учитывать

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

2.

приятно видеть попытку одолеть таки utf-8
однако не рекомендую гонять взад перёд данные функциями
MultiByteToWideChar/WideCharToString

пользуйтесь рассово правильными функциями iconv (библиотеки а не утилиты командной строки)
которая позволяет преобразовывать функции между кодировками без лишних операций с динамической памятью
к тому же эта библиотека стандарт де факто в отличие от того что используете вы..

3.

AnsiString lexems[MAX]={"union","intersect","except","some","not","like"
AnsiString lextype[MAX]={"Оператор набора","Оператор набора","Оператор набора"

как то криво держать параллельные массивы..
вас самих не напрягает высчитывать позиции?

очевидно вы хотели задать описание ключевых слов состоящее из самого слова и его типа
для этого правильно объявлять структуру и инициализировать её использую соответствующий синтаксис

http://stackoverflow.com/questions/1151 ... ialization

у вас получилось бы что то вроде:

Код: выделить все
lexemdescr lexems[] = {
{"union","Оператор набора"},
{"intersect","Оператор набора"}
}


а не та порнография что вы написали

вместо вашего
Код: выделить все
#define MAX 100   //заменитель для макс значения число с запасом

AnsiString lexems[MAX]={"u
..
for(int j=0;j<MAX;j++)


чёткие программисты используют что то вроде

Код: выделить все
AnsiString lexems[]={"u
..
for(int j=0;j<sizeof(lexems)/sizeof(AnsiString);j++)


4.

Текст лексемы = 1
Тип лексемы = Имя переменной


really?

вы не продемонстрировали толком не обработку utf-8 (в вашем примере нет русских букв)
ни обработку числовых и строковых констант
всё что не входит в ваш набор ключевых слов вы тупо обзываете именами переменных
что как бы не верно

в общем лавочка закрыта, 4 поставлю только за решение какого то нового косяка
либо продемонстрируйте нормальную обработку utf-8 либо научитесь правильно классифицировать лексемы, которые не являются ключевыми словами..

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 03 апр 2015, 12:59
vva
Ксения не прислала исходники, но по примеру выходного файла видно что основа скорее всего та же самая..

1. наивно думать, что лексические анализаторы для языков программирования отличаются только набором ключевых слов, вариантами указания комментариев и кавычками

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

2. раз уж вы всё равно пытаетесь продать мне 3 раза один и тот же код, то зачем же вы берёте код студента?
в сети полно вариантов самописных лексических анализаторов, потратили бы немножко времени, нашли бы что то более приличное..

в том что сдаёте вы виден рост над собой только первого кто это написал
он по крайней мере сделал это сам
остальным, раз уж расположение рук на туловище не позволяет,
возможно лучше бы ориентироваться на какие то более проверенные образцы

Re: Основы трансляции, УдГУ, 2015

СообщениеДобавлено: 03 апр 2015, 16:02
vva
меня тут пытаются убедить в том что вы все не профи программеры и не хотите ими быть..

возможно вас утешит такая картинка:

code-review.png


и чему то научит такая:

sally-code-review.png
sally-code-review.png (187.31 KiB) Просмотров: 18655