Парсинг скриптов
Такая вот проблема. Думаю над системой парсинга скриптов (пока не начал реализовывать) и столкнулся с такой проблемой. Допустим, у меня есть скрипт файл, который надо отпарсить:
---------------Script.uss content---------------------- MoveEntity door, 0,.1,0 y=y+1 --------------end script-------------------------------- , где door - какойто объект, существующий в мире (заданный изнутри блица), а y - какая то переменная, заданная изнутри блица. Как отпарсить эти строчки? Причем проблема то даже не в общем парсинге, а в парсинге entity из скрипта. Ведь entity в блице это указатель на объект, и вот как присвоить какое нибудь значение внутренней блицевской переменной из скрипта? Или сделать что нибудь с entity из скрипта? А то пока никаких идей... |
Ответ: Парсинг скриптов
LD
регистрировать в скриптовой машине имя переменой и указатель на нее так ты можешь из скрипта менять блицевские переменые ps. это вроде идинственый простой метод |
Ответ: Парсинг скриптов
Мне интересны не сколько простые методы, сколько общий алгоритм действий, ведь полезнее будет знать несколько методом решения данной задачи. Но все равно спасибо )
|
Ответ: Парсинг скриптов
LD
к примеру еще можно регистрировать переменую после выделения ей памяти (написать свой менеджер памяти, но тогда не очень понятно с именами переменных) |
Ответ: Парсинг скриптов
просто возьми готовый скриптовой язык для Б3Д,например есть BSE.
|
Ответ: Парсинг скриптов
Genius
|
Ответ: Парсинг скриптов
Про существование BSE я знаю, но зачем использовать готовое, когда интереснее написать свое. Так легче понять принцип работы скриптовой машины, и соответственно зная архитектуру легче ей оперировать.
|
Re: Парсинг скриптов
ужас вы где таких слов понабрались, нельзя попростому)
while mid(s,i,1)<>"." i++ wend вот так это делается. |
Ответ: Парсинг скриптов
Leito
у тебя в строке содержится "door_1" как ты найдешь по тексту в строке переменную в блице ? при етом строка может менятся ... если ты мне раскажешь как найти того чего нет (имя переменых убиваются при компиляции) то буду очень благодарен :) |
Ответ: Парсинг скриптов
А зачем обращаться именно по имени? Допустим перед началом работы передает в скрипт запрошенные им переменные (допустим пусть это будет адрес области памяти, в которой храниться значение этой переменной (относится и к ентитям также)). Но следовательно возникает две проблемы:
1) Как узнать в какой области памяти храниться переменная (желательно еще знать ее тип, чтобы правильно определить смещение по блоку) 2) Как оперировать переменной зная ее адрес в памяти (как издевательство можно ассемблерной врезкой работать с регистрами проца (то есть хранить переменную не только в памяти но и в регистрах (допустим y в ах? и.т.д) и соответственно передавать в скрипт нужный регистр... Но в этом методе есть свои минусы.... Может есть какие нибудь еще варианты? Все таки интересно с памятью - надеюсь сможете помочь ) |
Ответ: Парсинг скриптов
LD
Почитай про http://ru.wikipedia.org/wiki/JIT но в любом случае тебе нужно будет делать обвязку чтобы из программы обращатся к переменным скрипта или наоборот |
Ответ: Парсинг скриптов
Может я конечно туплю, не бить сильно...
Но разве нельзя использовать сначала NameEntity, цикл по всем entity и сверять EntityName? В dll'ках (например в darkextension), кстати, были функции FirstEntity, LastEntity, NextEntity и т.д. |
Ответ: Парсинг скриптов
Michael
Код:
; .. тут мы еще можем обратится к переменной SomeVar идинственый вариант это сохранить где нибудь имя и адресс переменной в первой части а во второй уже по имени получать адресс и обращатся к переменной |
Ответ: Парсинг скриптов
ну так а что мешает проверить If EntityName$(entity)="NeedEntity" then ...
Ну и естественно, это только для объектов. |
Ответ: Парсинг скриптов
ну дык ето не будет работать.
у тебя то EntityName(ent) = SomeVar. jimon, а как узнать адрес блицовой переменной? разве льзя? |
Часовой пояс GMT +4, время: 11:11. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot