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

Обсуждаем разработку программного обеспечения

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

Сообщение Kirill_V » 24 фев 2015, 15:57

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

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

Сообщение VictorovichKseniya » 28 фев 2015, 11:29

Скажите пожалуйста, А вот как разобрать например такую строку? Точнее как должен выглядеть ее разбор?
position:relative;
position лексема
и relative тоже
но если свойство будет типо значения или текста то уже не считается лексемой. как быть?
Человек, легко поддающийся влиянию окружающих, рано или поздно покупает слона.
VictorovichKseniya
 
Сообщений: 3
Зарегистрирован: 15 фев 2015, 07:30

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

Сообщение vva » 28 фев 2015, 15:52

лексемы тут:
position
:
relative
;

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

тогда лексемы:
font-family
:
"CPW-normal"
;
Аватар пользователя
vva
Администратор
 
Сообщений: 2616
Зарегистрирован: 06 фев 2007, 13:33

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

Сообщение VictorovichKseniya » 01 мар 2015, 06:47

Тогде в таблице, чем должно быть написано
position
:
relative
;
?
чем должны являться эти лексемы? Вопрос глупый но все же ответьте пожалуйста.
Человек, легко поддающийся влиянию окружающих, рано или поздно покупает слона.
VictorovichKseniya
 
Сообщений: 3
Зарегистрирован: 15 фев 2015, 07:30

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

Сообщение vva » 01 мар 2015, 13:22

ну это всё ключевые слова (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 )

в общем если у вас типы лексем будут не совсем так называться - оценки снижать не буду
тут возможны разные подходы
чтобы вам (и мне) из низ выбирать, нужно пописать такие вещи несколько раз "с нуля"
Аватар пользователя
vva
Администратор
 
Сообщений: 2616
Зарегистрирован: 06 фев 2007, 13:33

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

Сообщение vva » 03 апр 2015, 11:15

Яковлев, как приславший хоть что то первым получает 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);//сохранение текста символьной строки

у вас уже в лексическом анализаторе происходит выделение блоков динамической памяти?
за такие вещи в худо бедно приличных местах бьют, возможно даже ногами..
Аватар пользователя
vva
Администратор
 
Сообщений: 2616
Зарегистрирован: 06 фев 2007, 13:33

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

Сообщение vva » 03 апр 2015, 12:08

Суставова тоже прислала первую лабораторную..

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

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

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

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

суставова_яковлев_diff.png
Аватар пользователя
vva
Администратор
 
Сообщений: 2616
Зарегистрирован: 06 фев 2007, 13:33

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

Сообщение vva » 03 апр 2015, 12:40

продолжаем заочное эпистолярное общение с неизвестным писателем лабораторных работ..

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 либо научитесь правильно классифицировать лексемы, которые не являются ключевыми словами..
Аватар пользователя
vva
Администратор
 
Сообщений: 2616
Зарегистрирован: 06 фев 2007, 13:33

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

Сообщение vva » 03 апр 2015, 12:59

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

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

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

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

в том что сдаёте вы виден рост над собой только первого кто это написал
он по крайней мере сделал это сам
остальным, раз уж расположение рук на туловище не позволяет,
возможно лучше бы ориентироваться на какие то более проверенные образцы
Аватар пользователя
vva
Администратор
 
Сообщений: 2616
Зарегистрирован: 06 фев 2007, 13:33

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

Сообщение vva » 03 апр 2015, 16:02

меня тут пытаются убедить в том что вы все не профи программеры и не хотите ими быть..

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

code-review.png


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

sally-code-review.png
sally-code-review.png (187.31 KiB) Просмотров: 8100
Аватар пользователя
vva
Администратор
 
Сообщений: 2616
Зарегистрирован: 06 фев 2007, 13:33

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0