[ВХОД]

Главная | Содержание | Форум | Файлы | Поиск | Помощь |
NAVIG
О форуме
Резонансные генераторы
Магнитные генераторы
Механические центробежные (вихревые) генераторы
Торсионные генераторы
Электростатические генераторы
Водородные генераторы
Ветро- и гидро- и солнечные генераторы
Струйные технологии
Торнадо и смерчи
Экономия топлива
Транспорт
Гравитация и антигравитация
Оружие
Нейтронная физика
Научные идеи, теории, предположения...
Прочие идеи (разные)
Новые технологии
Коммерческие вопросы
Барахолка
Патентный отдел
Сделай сам. Советы.
Конструкторское бюро
Помощь сайту...
Ищу спонсора или рекламодателя. Принимаю пожертвования на
Юmoney 4100135735990
Яндекс 5599 0050 7259 9603
Сберка 4276 1300 1935 2180

Денег нет,
...но вы держитесь там.
Удачи вам! И здоровья!


мобильная версия
Печатать страницу
Форум - Прочие идеи (разные) - Робототехника - Game Of Life - Стр.1
Nemohkrap | Post: 243715 - Date: 30.04.10(15:21)
Очень интересный двоичный автомат:
и файлы процессов к нему(помещаються в ту же папку)

Размер : 897.27 KB
Размер : 173.57 KB
_________________
Любитель☺
- Правка 30.04.10(15:23) - Nemohkrap
ert_zeb | Post: 246155 - Date: 18.05.10(18:04)
У меня есть самопальный недетерминированный конечный автомат, на Delphi 6 написан. Что-то типа YACC, но вместо формирования парсера для некоторого языка, просто вызывает процедуры для конечных состояний на простеньком языке типа Форта.
До конца так и не дописал (пишу лишь редкими "набегами"), но вообще, он как-то работает. Вот и думаю скинуть-не скинуть исходник? С одной стороны не доделан, с другой, фиг его знает доделаю ли вообще (я ж не Глушков всё таки).
К тому же, мож и такой кому сойдёт?

Nemohkrap | Post: 246178 - Date: 18.05.10(21:06)
скинь - интересно глянуть
подучусь...

_________________
Любитель☺
ert_zeb | Post: 246255 - Date: 19.05.10(09:52)
Конструктивно он из состоит из простенькой программы, в которой можно открыть и "запустить" C-ишный файл. При этом в правой части окошка отображается то, что он там "думает" и делает. Выводимая информация дублируется в log-файл. Собственно это нужно потому, что ошибки refort (как я его обозвал) отлавливать ещё не умеет.
Практически вся основная программа умещается в одной библиотеке+ещё одна с процедурами для работы со строковыми переменными.
Программы для рефорта пишутся в двух файлах. Они там есть с расширениями lst (с описаниями грамматики) и prc (с описанием процедур). В былые времена, когда автомат был ещё детерминированным, он мог простенькие программы на Си компилировать. Файлы с правилами вплоть до rules54 были для него и приведены лишь для примера. rules-alt - это то, что он (теперь уже не детерминированный) использует сейчас. Фактически, сейчас, он не может толком скомпилировать одну простейшую процедуру из form5.c.

lst-файлы состоят из пар строк примерно такого вида:
`функция АБВ ( `внутренности )
"" "проц1,проц2" ",проц3" ""
здесь то, что помечено апострофом "`" является нетерминалом, то есть правилом для подстановок. Остальное - обязательные символы входного потока. Во второй строке (в кавычках) процедуры, исполняемые сразу при встрече символа (та, что до запятой) и после возврата из рекурсивных нетерминалов (та, что после запятой). Второй случай нужен для обработки правосторонних правил.

Стоит заметить, что в отличие от yacc подстановки осуществляются не префиксно, а постфиксно. Например, нужно создать список запятых.
для yacc:
zap: zap , | ;
для refort:
`zap , `zap_opt
`zap_opt `zap
`zap_opt `empty

Если попытаться написать нетерминал сразу после его объявления (н: `zap `zap), это приведёт к зацикливанию процедуры, составляющей список подстановок. Ещё из написанного видно два отличия (ещё пара недоработок):
1. приходится обязательно повторно писать названия нетерминалов (`zap_opt написан дважды), тогда, как у yacc можно поставить "|".
2. символ возможного пропуска пишется специальным оператором `empty. Тогда, как в yacc лишь пустота.

Кстати, есть и другие спец. операторы. `ident, например допускает любое слово в качестве подстановки.

Запускаемые из кавычек процедуры, находятся в prc-файлах. Формат процедуры простейший:
название x x x x x x x x x
То есть вся процедура должна быть в одной строке. Принцип работы тот же, что и в Форт-е имена переменных (они отмечены символом @ ) сохраняются в стек. Команды (например = ) забирают нужное число переменных с верхушки стека, а результат опять помещает на вершину. Например:
add_abv @tmpstr "" = 'абв' +
поместит на верх стека переменные tmpstr и пустую строку. Очистит tmpstr приравниванием и вернёт её же в стек. Потом + добавить к ней надпись "абв".

Стоит заметить, что все переменные refort-а - символьные. Для преобразования в число надо ставить $. Например:
summ @rez 4 $ 2 $ + =
сложит и приравняет к rez

полностью все команды я не помню (хоть их там как кот наплакал), часть указана в table.txt

Вот практически и всё, остальное - это лишь множество нюансов и недоделок. Плюс, непосредственно, вопросы связанные с разными типами грамматик и теорией компиляции. Они здесь не рассмотрены, но если надо, можно и пояснить.

Размер : 269.11 KB
Nemohkrap | Post: 246280 - Date: 19.05.10(15:55)
слил, буду смотреть..


_________________
Любитель☺
Форма ответа
Добавить файл: ≤ 1.95 MB
Описание файла:
Нельзя загружать файлы - php, php3, pl, phtml, html, htm, asp, cgi.
Нельзя картинки в BMP. Сначала конвертируйте в JPG или GIF.
Если картинка больше чем 600х600, то отобразится ссылкой.
Форум - Прочие идеи (разные) - Робототехника - Game Of Life - Стр 1

Главная | Содержание | Форум | Файлы | Поиск | Помощь |
Valid XHTML 1.0 Transitional
Генерация страницы: 0.116 сек