Показать сообщение отдельно
Старый 20.03.2005, 18:27   #431
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: Декомпилятор скриптов Готики

2TycoooN:
А нельзя ли сделать, скажем, возможность отключить проверку на то, возвращает ли функция значение?
Я могу все ошибки с проверкой возвращаемого значения засунуть во Внимания, а править или нет - смотрите сами. Так устроит? Но, хочу предупредить, в оригинальных скриптах Готик 1 и 2 есть несколько действительных ошибок с возвращаемым значением.

------------------------------------------------------------------------------------
Предлагаю Вашему вниманию краткое руководство по ошибкам, которые обрабатываются компилятором.

Руководство по ошибкам Компилятора V2.0

Типы ошибок, обрабатываемых компилятором, и способы их устранения.
Преобразование скриптов в *.dat файл состоит из двух процессов: компиляции и линковки. Применительно к ошибкам на стадии компиляции можно выявить строку с ошибкой в конкретном файле (в сообщении об ошибке присутствует номер строки), на стадии линковки привязки к строкам где возникла ошибка *уже нет (в сообщении об ошибке отсутствует номер строки).

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

1. * * *Source-File <file_name> not found. – файл *.src с указанным именем не найден.
2. * * *Found no matching File : <file_name> – отсутствует компилируемый файл (группа файлов), указанный(ая) в файле *.src.
3. * * *Syntax error : <expression> - указанное выражение не соответствует требуемому синтаксису скриптов.
4. * * *Unexpected End of File. – неожиданный конец файла (обрабатываемое выражение синтаксически не завершено).
5. * * *Expected <expression> - внутри выражения в соответствии с правилами синтаксиса отсутствует указанное подвыражение.
6. * * *Assignment : Left operand is not a lvalue – возникает при попытке присвоить значение величине, которой оно не может быть присвоено (например: *500 = ххх).
7. * * *Unknown identifier : <name> - неизвестное имя переменной. Возникает когда переменная используется в выражении до ее объявления. Примечание: ошибка довольно сложна для локализации, существует несколько правил деклараций переменных: декларация функции или VAR переменной должна предшествовать первому вызову функции или VAR переменной; класс должен быть декларирован до его использования в любом виде; lvalue в выражениях присвоения должно быть декларировано до присвоения – эти виды ошибок обрабатываются компилятором на стадии компиляции. Имя инстанции (INSTANCE) или константы (CONST) можно использовать в выражениях до их деклараций, но в скриптах эти имена должны быть обязательно декларированы, иначе возникнет ошибка этого типа на стадии линковки.
8. * * *Expected an Integer-Value : <expression> - возникает при нахождении внутри целочисленного значения недопустимого символа (например: 256х)
9. * * *Redefined identifier : <name> - повторная декларация переменной (данное имя задекларировано в скриптах более одного раза).
10. * * *Syntax Error. First letter is a digit in prototype *(instance) name. <name> - имя класса, прототипа или инстанции не может начинаться с цифры.
11. * * *Not a valid class or prototype name : <name> - возникает при декларации прототипа или инстанции, когда базовый класс или прототип не декларирован.
12. * * *Undefined function : <name> - встретился вызов функция с именем name раньше её декларации.
13. * * *Func does not return a <type_value> - выполнен вызов функции в выражении присвоения, но функция имеет тип void или тип, возвращаемый функцией, не соответствует типу lvalue.
14. * * *Unexpected 'return' – выражение return встретилось не в функции.
15. * * *Wrong type : *<name> - выдается только линковщиком при несоответствии присваиваемых или сравниваемых типов. Примечание: В версии компилятора 2.0 эта ошибка выявляется уже на стадии компиляции и более подробно будет рассмотрена ниже.


Обычные ошибки не приводят к останову процесса компиляции, но если их больше 25 штук, процесс компиляции будет прерван. Введены начиная с версии 2.0.

1. * * *<name> undeclared name (function) – аналогично критическому сообщению №7, но возникает на стадии компиляции.
2. * * *Wrong type in '!' expression – неверный тип отрицаемого выражения (может быть только INT).
3. * * *Cannot assignment in 'if' expression – внутри if выражения встретилась операция присвоения (недопустимо).
4. * * *Comparison is possible only in 'if' expression – операция сравнения встречена не в if выражении (недопустимо).
5. * * *Function <name> in 'if' expression should return type INT – функция внутри if выражения может иметь возвращаемый тип только INT.
6. * * *Unexpected return – неожиданный return. Особенностью скриптов является то, что любое выражение внутри функции, если оно записано одиноко (не в операциях сравнения или присваивания) заносится в стек и может быть возвращено при выходке их функции (для этого необязательно указывать слово return), но это является потенциально скрытой ошибкой, подлежащей устранению.
7. * * *Index = <index> out of bounds array <name>. – индекс массива с именем name выходит за объявленную границу.
8. * * *Function <name>: Argument <number>: " Cannot convert from type <type1> to <type2> - значение переменной типа type1, используемое в качестве аргумента number функции с именем name типа нельзя преобразовать к типу аргумента type2. Необходимо использовать одинаковые типы.
9. * * *Cannot convert from type <type1> to <type2> - значение переменной типа type1 нельзя преобразовать к типу переменной type2. Необходимо использовать одинаковые типы. Примечание: Есть исключение из правила, оно относится к переопределенным типам. Для понимания этих *типов необходимо написать отдельную статью. Это же относится и к сообщению с ошибкой №8 (см. выше).
10. * * *Possible error, function should return value – функция объявлена с возвращаемым типом, но при выходе из неё ничего не возвращается. Сложный случай.


Внимания не влияют на процесс компиляции и линковки, выводятся только первые 50 вниманий, остальные блокируются. Введены начиная с версии 2.0. Пока существует только одно внимание.

1. * * *Possible error, function should return value – функция объявлена с возвращаемым типом, но при выходе из неё ничего не возвращается. Простой случай.

Ответить с цитированием