Форум » » исходники и новая версия URQ-интерпретатора. Стандарт парсера » Ответить

исходники и новая версия URQ-интерпретатора. Стандарт парсера

abcdef: Представляю тестовую версию программы URQ-интерпретатора с исходным кодом на языке Pascal. Оформление отображения текста пока не проводилось, основная задача - проектирование парсера для стандартизации и единообразия представления алгоритма разбор команд языка URQL. Практически все, если не все, программы URQL построены по принципу вычленения подстрок, когда считанная строка делится по позиции вхождения какого-либо слова, а эти половинки обрабатываются по отдельности... Здесь-же предлагаю алгоритм, работающий по принципиально-другому способу - разбору как у стандартных языков программирования. что реализовано в данной (0.0.1) версии: поддержка всех арифметических и логических операций, операторы: if ... then ... [else не поддерживается] p, pln, btn - строки текста с подстановками #выражение$ #%текстовая_переменная$ ##выражение$ instr - единственный способ создания текстовых переменных (длины хранимой строки пока ограничена 63 символами) с подстановками #выражение$ #%текстовая_переменная$ ##выражение$ goto, proc, common, inv, rnd, cls, input, invkill, perkill, save, pause, end. Характеристики: * работа с файлами неограниченной длины * при переходе по метке файл перечитывается заново * таблица переменных (переменные/инвентарь/метоки/строки) длиной 750 элементов. (строковые типы занимают по два элемента). * история возврата из подпрограмм на 1025 позиций. * анализатор ошибки отображает: необходимый оператор для данной конструкции, указание строки, позиции в строке где обнаружена. * запуск с командной строки (help - выводится при запуске без параметров) * пока интерпретатором обрабатываются файлы только в dos-кодировке (ASCII). Режимы работы: 0 - запуск квеста 1 - запуск из сохранения (не тестировался) 2 - сканирование квеста на наличие ошибок 3 - сканирование квеста на наличие ошибок и проверка наличия всех переходов по меткам (долго обрабатывает...) не знаю как здесь выложить файл... а так смотрите сюда: http://forum.ifiction.ru/viewtopic.php?pid=14929#p14929

Ответов - 117, стр: 1 2 3 4 5 6 All

abcdef: блин, проглядел здесь посты за последние 3 дня, не удержусь, скажу - это больше похоже на какой-то балаган... во-первых ни одного конкретного примера, который неправильно обрабатывается интерпретатором. во-вторых мало кто из рьяных участников даже ознакомился с его работой и попробовал запускать квесты. в-третьих оказывается fireton принял позицию, как конкурирующей фирмы, и несколько безосновательно fireton пишет: прежде чем выставлять свои поделки на всеобщее обозрение, вам стоит, во-первых, научиться программировать, а во-вторых - получше ознакомиться с предметной областью 1. Где плохо спрограммировано? врятли найдешь лишнюю команду (к примеру твоя прога - 700 кб, моя - 25 кб а в windows-реализации не более 70 кб) 2. С предметной областью все в порядке, прочитал документацию, имеющимися на данный момент средствами можно реализовать практически все возможности URQL, кроме работы со строками, музыки, графического режима и html ____ p.s.: пока нет конкретных примеров все это пустые разлагольства. А пока буду добавлять работу со строками и поддержку win-кодировки...

fireton: fireton принял позицию, как конкурирующей фирмы Не смешите меня, пожалуйста. Где плохо спрограммировано? Практически везде. Чего только стоит функция поиска метки в коде через перечитывание файла. Каждый раз. Но главным показателем является то, что ваш интерпретатор падает практически гарантировано на любом квесте из библиотеки. И прекратите занимать позицию оскорбленного гения. Вам здесь никто ничего не должен.

abcdef: падает потому что: либо кодировка не dos, либо не будем гадать - код в студию! ___ >>>...практически везде... - опять уходим от ответа? ___ хоть при поиске каждый раз перечитывает, зато позволяет работать с квестами любого размера, кто не знает - в чистом DOS всего 500 кб памяти. помнится в dos_urq сказано что текст локаций можно менять во время выполнения, значит тоже перечитывает файл.


Byte: Квест любого размера при ограничениях длины строк, количества меток и переменных? Смешно.

uux: abcdef пишет: uux - квест в студию!, т.е. желательно локацию в которой произошла ошибка (ИМЯ локации можно узнать если сделался файл DEBUG.TXT) См. здесь. Локация - стартовая (собственно, если ничего не делать, то вылетает, а если переместить курсор выбора кнопки - то виснет наглухо). ну конечно людьми, заслужившими доверие, например uux. Рановато меня в соратники записали;). Интерпретатор с несовместимым со "стандартным де-факто" досурковским синтаксисом, с кучей ограничений (из-за которых не проигрывается бОльшая часть написанных на Урке квестов)... Синтаксический контроль (по опять-таки не вполне совместимым со стандартом де-факто правилам) - это, конечно, хорошо, но не настолько, чтобы компенсировать остальные недостатки. Я не профессиональный программист и поэтому не буду обсуждать достоинства/недостатки кода, а скажу с точки зрения пользователя - разработка явно (пока?) весьма сырая, лично я бы такую выкладывать не стал, пока хотя бы не потестировал ее сам и не добился более-менее удовлетворительной работы на более-менее обширном материале. Перекладывать альфа-тестирование с собственных плеч на пользователей - ИМХО ход сомнительный. Дело Ваше, конечно - но тогда не надо болезненно реагировать на нелестные определения Вашего творения. Без обид. Я уж не говорю (потому что не хочется повторятся;) о востребованности даже нормально работающего URQ-интерпертатора под DOS при живой Досурке...

Nex: Дык эта разработка уже загнулась, как и множество остальных - чо на неё время тратить? Поставить на полку ещё один усохший скелетик нерождённого недоинтерпретатора, вздохнуть и забыть.

abcdef: прошу прощения, черт дернул компилить перед копированием на сайт с опцией с тотальной проверкой выполнения программы - в итоге вылетало при переполнении переменной счетчика... исправлено и добавлена работа c win-кодировкой __ uux - доверяю, потому что помогал с документацией и давал дельные советы. noname - тоже помогал...

noname: кста, досурка НЕ перечитывает файл. проверено. фраза "текст локаций можно менять во время выполнения", возможно, цитирована не точно, и могла означать, что с помощью #%$ можно подставлять операторы. таким образом программа может меняться во время выполнения. интересно, что досурка не имеет ограничений на размер (или кол-во переменных) квеста. впрочем, никто не пробовал запускать квест более 1Гб... запустив свой пример(см внизу), обратил внимание на странное 'прыгание' курсора. с чем это может быть связано? --- upd: и сделай, плизз возможность завершить работу нормально. например, дойдя до одной из конечных локаций : "и откуда у Евга спасательный круг. вокруг- Латвия" прога виснет. так же хотелось бы иметь возможность корректно завершить работу в любой момент. и ещё: какие же баги ты выловил в других квестах с помощью своего скана? --- пример: :1 pln один btn 2,2 btn 3,3 end :2 pln два btn 1,1 btn 3,3 end :3 pln три btn 1,1 btn 2,2 end :common end

abcdef: курсор прыгает,потому что сэкономил пару команд-меню перерисовывает за каждый цикл ожидания ___ возможно не так понял о перечитывании файла,но как бы не было,это единственно-оптимальный способ.Буферизация не подходит в виду непредсказуемости. Квест можно полностью видоизменять когда отобразилось меню какой либо локации, иначе можно сбить возврат из подпрограмм. ___ отлавливаемые ошибки (если пользовательские имена не содержат запрещенных символов) это полностью весь синтаксис,например в вычислениях: if абв abc_or_def * (5 + ) and then pln ... ошибки будут указываться в "5+)" и "and then" случаях.Хотя при выполнении недостающие операнды заменяются нулями. Сканирование меток довольно сильно помогает. Те участки кода которые хотелось бы пропустить при проверке и выполнении, комментируйте символом ";" ___ согласен,в конечной локации следует чтоб интерпретатор выдавал сообщение об этом, квест завершается кнопкой ESC, в любом случае делается файл DEBUG.TXT -это в целях отладки и сохранения квеста в любой локации

abcdef: пожайлуста, если какие-либо участки квестов не работают - выкладывайте их прямым текстом, а то в браузере отключена java, и не могу смотреть "скрытый текст"

Nex: Включи java

Евгений: Nex, ты злой :))

Nex: Путь наименьшего сопротивления, всего лишь.

qwerty: как-то странно работают anykey. т е кроме того, что не работают- ещё и "съедают" часть выводимого до этого текста замечено в игре "Холм Фей". найти её можно где-то здесь: http://www.urq.plut.info/taxonomy/term/1 abcdef:Ошибки в готовых квестах, отлавливающихся моим интерпретатором - Есть. noname:и ещё: какие же баги ты выловил в других квестах с помощью своего скана? и какие же? в каких играх? интересно же вот, например какой баг выловил я в упомянутой игре: про строчку if масс#x$#y$=1 then btn Север, Север & btn Юг, Юг & btn Запад, Запад & btn Восток, Востокскан выдаёт "IF без THEN" на последок добавлю ложку мёда: сканер нашёл ошибочную строчку ln #$это хорошо. плохо, что при всём при этом эта строчка нормально игнорируется существующими интерпретаторами, а твой на этом- вырубается кста, интересно, что "Холм Фей" можно пройти и на досурке, и на Акурке. на других- не пробовал

abcdef: qwerty спасибо, разберусь с anykey немножко о вставках через "#...$", где "..." - это либо арифметическо-логическое выражение, либо строковая переменная. Работает это только в строках. Применительно к данному случаю будет выглядеть так: instr sys=масс#x$#y$ if system=1 then btn .... а ошибка выдает, потому что встречает символ "#" который должен встречаться только в строках. конечно не удобно,что на первой ошибке происходит завершение сканирования, но иначе алгоритм усложнился бы.

noname: abcdef пишет: возможно не так понял о перечитывании файла,но как бы не было,это единственно-оптимальный способ интерпретатор пока требует чтоб в каждом квесте была локация common, хоть и пустая, например: :common end Примечание для ускорения работы, желательно часто вызываемые локации, например common размещать как можно ближе к началу файла. что же будет при попытке запустить хоть сколько-нибудь весомый квест? мне просто жалко моего винчестера instr sys=масс#x$#y$ if system=1 then btn .... да. в этом случае скан-деббагер ошибку не найдёт. вопрос: планируешь ли ты со временем сделать нормальную поддержку #$ ? курсор прыгает,потому что сэкономил пару команд-меню перерисовывает за каждый цикл ожидания значит ли это, что при этом каждый раз перечитывается файл?

Евгений: Зря вы привязались к этому перечитыванию файла, это же как раз единственная прикольная фича - можно редактировать игру, одновременно в нее играя. А вот то что ни одна игра нормально не идет, это плохо :) Искать ошибки - ищи, но тогда уж и исправляй автоматически :) И опять же дос - все что нужно сейчас урке (если забыть про наш дивный синтаксис) это красивый гуй-интерфейс.

abcdef: http://forum.ifiction.ru/viewtopic.php?pid=15043#p15043 исправлено: - команда anykey (квест "холм фей" не обнаружил) - зарержка команды pause - уменьшено мерцание курсора - генерация ошибки, если невозможно перейти на метку (ранее просто зависал) - сообщение о завершении квеста, в локации которой нет кнопок ___ На действительно больших квестах происходит чтение. А небольшие файлы операционная система сама буферизирует, и не обращается к жесткому диску при повторном чтении. Диск гонять - эт плохо, но если вы слушаете музыку или смотрите фильмы - интенсивность работы диска в сотню раз больше. Когда отобразилось меню - чтение прекращается до перехода по меню. ___ исправлять ошибки врятли получиться из-за неоднозначности, например: ln #$.... здесь может быть два и больше вариантов - ln = #$.... pln #$.... поэтому нельзя исправить автоматом ___ Интерфейс - это косметика, пока главное - движек. ___ про поддержку #$ пока сказать однозначно не могу, а вот если нужно будет переделать квест под стандарты dos_urq и тд., то можно за минуту сделать так: открыть квест в блокноте (notepad.exe) - правка - заменить - пишем: Что: system Чем: #sys$ заменить все - сохраняем - закрываем.

qwerty: ааааааааааааааа, на плуте отсутствует "Холм Фей" !!!!!!!!!!!!!!!!!!

abcdef: пардон, если кто-то успел скачать файл "aurq003" это не та версия.. заменил свежим "aurq_003"



полная версия страницы