Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« : 21-09-2007 14:17 » |
|
...Кто ни буть пробовал писать виртуальные машины? Поделитесь информацией пожалуйста.
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #1 : 02-11-2007 17:38 » |
|
Уже сам написал. Пойду делиться опытом сам с собой.
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 02-11-2007 18:12 » |
|
а что за виртуальные машины ?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 02-11-2007 18:41 » |
|
что сам написал? 17:17 первый пост 19:38 второй Били!!! Хватай его!
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 02-11-2007 19:04 » |
|
Sla, да не, польтора месяца уж ))
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 02-11-2007 19:06 » |
|
Ух! Пронесло! Вахмурка, расскажи, пожалуйста, че нарыл, че получилось?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #6 : 09-12-2007 09:13 » |
|
Ух! Пронесло! Вахмурка, расскажи, пожалуйста, че нарыл, че получилось?
... Да нечего сложного. Я имел в виду простой интерпритатор некого "внутреннего" кода, уже сто раз писал и сто раз переписывал, обычная рутина. Это для моего калькулятора, нужно добавить поддержку пользовательских функций. Проблема вообще не в этом. Ни как не могу найти книгу А.В. Костельцев "Построение интерпретаторов и компиляторов. Использование программ BIZON, BYACC, ZUBR" + CD-ROM, наличие сидюка к книге главное. Скорее всего писать lR-анлизатор к грамматике придётся ручками но хотябы грамматику можно будет проанализировать при помощи этих программ на предмет конфликтов сдвиг-свёрстка и сдвиг-перенос. Вообше ужасно не хватает времени. P.S. А вообще хочется создать свой язык программирования это ведь такая клёвая игрушка!
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 09-12-2007 09:35 » |
|
Вахмурка, А вообще хочется создать свой язык программирования это ведь такая клёвая игрушка!
а можно совместить есть такая игрушка - Colobot , там это и сделано. Сделай свою игру по такому же принципу Рады будем также поучавствовать
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #8 : 09-12-2007 10:33 » |
|
Скорее всего писать lR-анлизатор к грамматике придётся ручками но хотябы грамматику можно будет проанализировать при помощи этих программ на предмет конфликтов сдвиг-свёрстка и сдвиг-перенос. Trim решает подобные проблемы. Я сам недавно делал программный интерпритатор кода. Суть - Delphi-компоненты, аналогичные по функциональности флеш-компонентам. Когда пользователь ложит их на форму и запускает процесс компиляции, кроме exe-файла создается флешка. Роль интерпритатора - перевести Delphi-код, введенный пользователем в обработчиках событий в ActionScript в режиме DisignTime.
|
|
|
Записан
|
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #9 : 09-12-2007 13:31 » |
|
Скорее всего писать lR-анлизатор к грамматике придётся ручками но хотябы грамматику можно будет проанализировать при помощи этих программ на предмет конфликтов сдвиг-свёрстка и сдвиг-перенос. Trim решает подобные проблемы. Я сам недавно делал программный интерпритатор кода. Суть - Delphi-компоненты, аналогичные по функциональности флеш-компонентам. Когда пользователь ложит их на форму и запускает процесс компиляции, кроме exe-файла создается флешка. Роль интерпритатора - перевести Delphi-код, введенный пользователем в обработчиках событий в ActionScript в режиме DisignTime. А не подскажете где можно почитать про этот Trim? Чёто в google я ни чего не нашёл.( хотя может плохо искал ) . Книжку я то нашёл но жаба давит, помимо книжки придётся купить ещё что то что бы сумма заказа была не меннее 500 рублей.
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
zubr
Гость
|
|
« Ответ #10 : 09-12-2007 15:26 » |
|
Trim - это функция, применяемая в большинстве библиотек языков программирования. Действие ее как правило очень простое - удалять крайние пробелы и символы перевода строки. Тебе надо создать класс для работы с регулярными выражениями, есть готовые решения, но все равно надо будет их привязывать к твоей задаче. Погугли на тему "регулярные выражения".
|
|
|
Записан
|
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #11 : 09-12-2007 15:56 » |
|
Trim - это функция, применяемая в большинстве библиотек языков программирования. Действие ее как правило очень простое - удалять крайние пробелы и символы перевода строки. Тебе надо создать класс для работы с регулярными выражениями, есть готовые решения, но все равно надо будет их привязывать к твоей задаче. Погугли на тему "регулярные выражения".
У меня все сложнее. Для написания лексическоего анализатора регулярные выражения подойдут, хотя лексические анализаторы я писал и без них. А вот с синтаксическим анализатором всё не так просто.
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
zubr
Гость
|
|
« Ответ #12 : 09-12-2007 18:21 » |
|
А вот с синтаксическим анализатором всё не так просто. Ну, создаешь БД или XML-файл с ключевыми словами, функциями, выражениями и анализируй текст сверяя с БД. Я в принципе так и делал.
|
|
|
Записан
|
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #13 : 10-12-2007 17:18 » |
|
Вот фрагмент одной из грамматик с которыми я сейчас работаю. Граммитика не однозначна и будет доводится:
12. логТело ::= короткоеЛогТело | длинноеЛогТело
13. короткоеЛогТело ::= блк логВыход кблк
14. длинноеЛогТело ::= блк списокЛогОператоров логВыход кблк
15 логВыход ::= возврат логическоеВыражение ; | если ( логическоеВыражение ) логВыход иначе логВыход | длинноеЛогТело
16. списокЛогОператоров ::= списокЛогОператоров логОператор | логОператор
17. логОператор ::= если ( логическоеВыражение ) логОператор | если ( логическоеВыражение ) лоОператор иначе логОператор | пока ( логическоеВыражение ) логОператор | блк списокЛогОператоров кблк | если ( логическоеВыражение ) логВыход | если ( логическоеВыражение ) логВыход иначе логОператор | если ( логическоеВыражение ) логОператор иначе логВыход | пока ( логическоеВыражение ) логВыход | утверждение ; | ;
Некоторая сложность связана с тем что недостижимый код в языке-ошибка, второе я хотел максимально "нагрузить" синтаксический анализ , что бы в семантическом анализе использовать самые простые проверки.
Можно ли будет бодобную грамматику разобрать описанным Вами способом?
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
zubr
Гость
|
|
« Ответ #14 : 10-12-2007 20:56 » |
|
Ну а почему нет. Для каждого типа выражений (логические, арифметические и т. д.) создаешь в XML подветви с соответствующими ключевыми словами. Далее, разбиваешь тело выражения на отдельные слова, где разделителем может быть пробел, кавычка (тогда выделяешь все тело в кавычках), логические операторы и т. д. Далее, в зависимости от типа выражения, анализируешь слова (переменная или ключевое слово или оператор, обращаясь к тексту кода и сверяясь с XML) - если слово не определено - ошибка, далее заносишь слова в список (массив), после чего, в зависимости, от типа выражения определяешь правильность расположения (корректность) слов относительно операторов. Правда у меня задача попроще была, я на правильность код не проверял (это делал компилятор), моя задача была только перевести код, хотя особенности ActionScript, все таки заставляли в некоторых моментах анализировать код.
|
|
|
Записан
|
|
|
|
Вахмурка
Помогающий
Offline
Пол:
Программист
|
|
« Ответ #15 : 11-12-2007 16:36 » |
|
А с книжкой у меня случился облом: в фирме где я пытался её заказать, товара нет в наличии. Буду пробовать разные способы анализа, может попробую и Ваш.
|
|
|
Записан
|
Программа – это мысли спрессованные в код.
|
|
|
|