Робот-программист "Ванюша". Учим ASM.

Тема в разделе "WASM.ZEN", создана пользователем vladfind, 5 дек 2005.

  1. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Многие компонеты проектируемой системы уже созданы. Вот набрёл на информацию.



    Год 2001. ЭСКОРТ в будущее..



    Основные понятия и компоненты системы ЭСКОРТ

    Инструментальная система ЭСКОРТ создавалась в научно-исследовательском институте системных исследований РАН как средство повышения производительности труда профессиональных программистов. Было использовано несколько путей повышения производительности:



    * предоставление пользователю единой среды редактирования/анализа/выполнения программ. Поддержка этапов проектирования, тестирования и сопровождения;

    * повышение уровня языка, создание языка широкого спектра, совмещающего в себе возможности языка спецификаций и компилируемого языка;

    * реализация средств расширения языка на основе использования схем программ.



    Нетекстовое представление программы

    С точки зрения реализации ЭСКОРТа одним из центральных является решение о сокращении концептуального разрыва между понятиями пользователя и понятиями инструментальной системы. Главное средство такого сокращения - нетекстовая модель программы, с которой работают все компоненты ЭСКОРТа. Программа представляется в виде ориентированного графа объектов. Объекты моделируют такие сущности, как константа, переменная, тип, процедура, пакет. В модели явно представлено понятие варианта программной системы. Каждый программный фрагмент и, соответственно, объект модели, его представляющий, имеет несколько независимых характеристик: способ реализации, внешний вид, места описания и использования, формальные параметры, пояснительная информация и т.п



    05200101597 Галатенко Владимир Антонович. Исследование и реализация методов повышения производительности труда профессиональных программистов: Дис... д-р физ.-мат. наук /Институт системного программирования РАН (ИСП РАН) . - Защищена 2001.06.18.

    УДК 681.3.06. 210 с. , 3 ил.} - Библиогр.: 121 назв.
     
  2. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Завершил новый дизайн сайта: http://www.robot-ivan.narod.ru

    С большим вниманием прочитаю критику и предложения. Благодарю за терпение и понимание.
     
  3. edmunds

    edmunds New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2006
    Сообщения:
    4
    Ochevidno, eto fsyo fignya - na durakoff........
     
  4. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Состояние на текущий момент проекта.



    Проект "робота-программиста" маленькими шагами развивается, а именно:



    <ol type=1>

    <li> На языке 'GenTee' пишется клон ассемблера с открытым кодом.

    <li> Создаётся библиотека обработки строк описания синтаксиса языка

    <li> Трансляция исходного кода клона FASM на языке программирования 'Gentee' в сематическое описание. Далее из сематического описания транслировать на диалект 'Странник СИ-ПАСКАЛЬ-МОДУЛА'.

    <li> Клонировать IDE BlackBox, инструмент управления проектом.

    </ol>




    Язык Gentee http://www.gentee.ru является процедурным языком высокого уровня с диалектом синтаксиса С/С++. Подобно языкам Java или С# исходный текст программы компилируется в промежуточный код, который затем выполняется виртуальной машиной.



    Почему выбрал этот язык для моделирования и построения прототипа?

    а) Подробное описание синтаксиса языка.

    б) Язык и интерпритатор, и можно компилировать приложения. Наличие разнообразных библиотек.

    в) Можно выполнять в среде Win XX, Linux.

    г) Компактный, аскетичная и простая среда проектирования на языке Gentee. Можно ограничится текстовым редактором.

    д) В синтаксисе заложены элементы автоматизации пограммирования, например можно заканчивать строку или ';', или 'конец строки'.



    Сначало проектировал и использовал 'Макроязык 1C','JAVA', 'Странник СИ-ПАСКАЛЬ-МОДУЛА'. Некоторые пользовательские характеристики этих инструментов на данном этапе увеличивают, и значительно, трудоёмкость и тормозят производительность кодера-программиста.



    Создаётся библиотека обработки строк описания синтаксиса языка



    Пример описания синтаксиса языка в словесной форме (БНФ)

    <буква> ::= 'A' | 'B' | ... | 'Z' | 'a' | 'b' | ... | 'z' | 0x80 | 0x81 | ... | 0xFF

    <имя> ::= (<буква> | '_') {<буква> | '_' | <десятичная цифра>}



    Один из ключевых моментов проекта. Известно, что с помощью БНФ (формулы Бекуса-Наура) можно определить любой современный язык программирования. В базе знаний будем, обязательно, хранить полное описание диалекта языка программирования. Тогда можно создать однозначную процедуру трансляции с одного диалекта языка в другой без участия кодера-программиста , например код программы на C++ IBM в работоспособный код программы на C++ MS.



    Трансляция исходного кода клона FASM на языке программирования 'Gentee' в сематическое описание. Далее из сематического описания транслировать на диалект 'Странник СИ-ПАСКАЛЬ-МОДУЛА'.



    Клонировать IDE BlackBox, инструмент управления проектом.
     
  5. edmunds

    edmunds New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2006
    Сообщения:
    4
    NU CHTO? ISDOH VASH VANYUSHA-PROGRAMMIST7
     
  6. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    В одной из недавних "Компьютерр" была задета тема мета-программирования. Вобщем пока еще далеко до создания действительно полезных и простых инструментов, но уже есть подвижки. Компилятор компиляторов (yacc) кстати довольно давно используется в Линухе, так что как базовый инструмент можно использовать его.
     
  7. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    Конечно я обратил внимание на технологию 'yacc'. Однако смущает древность этого подхода. Если бы это был "луч света в тёмном царстве", тогда давно программирование было бы простым и неквалифицированным трудом.



    Смотрел код, который формирует Як. Ничего не понятно. Кодогенерация происходит на основании автоматной модели. Не рассчитана на восприятие человеком и значит выполнить переработку кода не простая проблема, по-моему скромному мнению.
     
  8. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    vladfind

    Он по идее не должен генерировать понятный код. Он должен создавать компиляторы (или точнее фронт-енды) для обработки некоторого программного кода. Есстно, что переконопачивать код полученного компилятора тяжело - он для этого не предназначен. Тут вот в теме "Улыбнитесь" был упомянут язык программирования "ПРЕВЕД". Так вот yacc может в принципе создать для нее компилятор (если ему понравяться кириллические символы), потребовав от программиста значительно меньше времени и усилий, чем при создании компилера с нуля. Двигаться же в этом направлении со стороны анализа исходного кода, для построения рабочего компилятора гораздо тяжелее.
     
  9. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши




    Остановлюсь на главной идеи и предпосылки.



    Цель 1.



    'yacc','bison' - это построить программный код на языке Си, программный код на основе синтаксиса входного языка. Послекомпиляции получаем Исполняемый программный код для процессора.



    <font color="blue]ОПИСАНИЕ ЯЗЫКА -> yacc -> C++ -> КОД ПРОСЕССОРА</font><!--color-->



    Программист-кодер участвует на этапе описания языка. Остально выполняет программу.



    Цель 2.



    Мой подход отличается.



    <font color="blue]КОД ПРОГРАММЫ -> БАЗА ЗНАНИЙ ПРОГРАММИСТА -> КОД ПРОГРАММЫ -> КОМПИЛЯТОР ЦЕЛЕВОГО ЯЗЫКА -> КОД ПРОСЕССОРА</font><!--color-->



    База знаний является особой справочной системой, инструментом, "интелектуальным" помощником с накопленными специфическими знаниями по программированию. Человек, программист, активный участник. База знаний постоянно контролирует и помогает человеку изменять и добавлять программный код на основе накопленных знаний.



    Практически можно посмотреть обработку "Экспорт и импорт справочников" в среде 1С. На форме обработке есть закладка "База знаний", где можно выбрать опции и посмотреть как генерируется код программы. Т.е. в обработке есть маленькая база знаний по экспорту и импорту элементов справочника с учётом свойств справочника и состояния элементов справочника. На выходе базы знаний програмиста мы получаем отлаженный, работоспособный программный код для правильного импорта и экспорта любого справочника в информационной системе.
     
  10. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    > Как я понял Ваши интересы переместились в сторону переноса в

    > BlackBox продуктов предназначенных для работы с

    > конфигурациями 1С.



    Мой интерес не конкретный язык, а построение инструментальных средств для программиста кодера. В 1С, как открытая система построения информационных систем, наработано много решений. Почему бы эти крупицы опыта не перенести в метаописание с целью трансляции на другой язык? В BlackBox замечательная среда быстрой разработки, отладки и сопровождения проектов. Конечно это только начальные кубики. Но какие!! Как не хватает подобной графической системы для FASM и других продуктов с "командной строкой".



    > Для меня же важно добавлять в BlackBox средства, расширяющие

    > его использование сейчас.



    И для меня! Не хватает рекламы, агитации пользователей. Не хватает толковых для массового пользователя статей, где бы в сравнении и подробно описаны реализованные идеи в компонентном Паскеле. И, далее, разве построение базы знаний программиста для среды BlackBox не есть интересная и перспективная задача? Только сегодня удалось открыть для себя клад с решениями, а именно код программы http://www.zinnamturm.de и в часности:





    * Babel Compiler Compiler.

    * C to Component Pascal Translator.

    * Turbo Pascal to Component Pascal Translator.

    * Pascal to Oberon Translator.

    * Oberon-0 Compiler for BlackBox.







    В длижайшие дни начну разбирать исходный код и перерабатывать. Меня тоже интересует "расширяющие способности BB" в разрезе эргономики Компьютер-Человек. Или понятнее - повышение производительности кодирования. BB - интеснейший продукт. Так лаконично и элегантно написана TEXT система! Для FASM+IDE-TEXT на BB понравится пользователям.



    Кстати, а почему некоторые ссылки по BB стали недоступные? Бросили развивать или другая причина?





    > Если Вам удобнее использовать GenTee - пишите на нём.



    Отказался, как и писать большие проектв на Странник (Модуля-Си-Паскаль) http://home.perm.ru/~strannik/ Автор высказал и реализовал идеи в своём компиляторе. Часть этих идей обязательно использую, уже использую! Но как неудобно написан IDE. По- старинке. Писать на нём не производительно и долго. Пытался, но оставил затею из-за большой трудоёмкости. GenTee - тоже всё в командной строке, а значит объём предварительной работы очень большой. Плюс особенности реализации синтаксиса языка и error в моменты исполнения. А вот,- BlackBox, - теперь рабочий инструмент. Тем более другие программисты это прочувствовали и реализовали модули по трансляции с одного языка на другой.



    > Всё-таки с одного языка высокого уровня на другой перенести код

    > легче, чем с низкоуровневого.



    Конечно легче. Но и ASM очень нужен. Автор компиляторя "Странник" отдал сообществу исходные тексты на языке Modula. Т.е. Странником можно собрать Странник. Работает - проверял. Можно взять часть, где реализован ASM и уже сейчас использовать в BlackBox. Проверю Oberon-0 Compiler for BlackBox и возможно автоматически транслирую код в среду BB. В "ручную" переписать можно, но нет основного ресурса - свободного времени.



    > Мне представляется следующий синаксис для вставки

    > ассемблерного кода. Поддерживаю Вас!



    Код:

    ПРОЦЕДУРА имя;

    НАЧАЛО

    ASM

    ОператорASM;

    ОператорASM;

    ...

    КОНЕЦ;

    КОНЕЦ имя;



    С уважением, Владимир.



    P.S. Получил от Ильи Ермакова http://blackbox.metasystems.ru/forum следующее сообщение



    Коды в модуль в ББ встраивать можно - это описано в разделе Особенности платформы (Platform-Specific-Issues).

    <font color="green]<ol type=1>

    PROCEDURE
    Код (Text):
    1.  Erase (adr, words: INTEGER) (* erase memory area *)
    2.  
    3. 089H, 0C7H, (* MOV EDI, EAX *)
    4.  
    5. 031H, 0C0H, (* XOR EAX, EAX *)
    6.  
    7. 059H, (* POP ECX *)
    8.  
    9. </ol></font><!--color-->
    10.  
    11. > Исходные коды для сборки ядра BB. Это есть в природе?
    12.  
    13.  
    14.  
    15. Естественно. Все исходники ББ открыты, написаны исключительно на Компонентном Паскале и собираются самим же ББ. Kernel - вот оно и ядро. Посмотрите ветку [url]http://blackbox.metasystems.ru/forum/viewtopic.php?t=132
    16.  
    17. [/url] и  сегодняшнюю [url]http://blackbox.metasystems.ru/forum/viewtopic.php?t=142[/url] - тут я написал, что почитать можно про устройство ББ.
     
  11. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    vladfind

    Позвольте снять перед Вами шляпу... Бьюсь об заклад, что мы о Вас еще услышим, в будущем!
     
  12. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    crypto Спасибо на добром слове. Буду стараться. :)

    Состояние дела следующее:

    - весна;

    - начало лета.



    На BlackBox испытываю модули. Научился через WinAPI определять тип носителя. Известно, что каждый тип файловой системы имеет свои правила написания имён файлов и каталогов. Вот и хочется написать модуль, который бы определял валидность командной строки. Далее разбор собственно командной строки и выполнения действий, т.е. клонирование FASM.
     
  13. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Весна 2010 года. Проект создание базы знаний программиста "Робот-программист Иван" продолжается!

    В настоящий момент продолжаю создание первых утилит для импорта исходного кода языка программирования FASM, а также испытываю некоторые технологии web on-line
    технологии компиляции кода. В проекте предусматривается такая технология. Вы работаете в обычном браузере и, вставляя исходный код программы, компилируете в код целевого процессора.

    Для разбора исходного кода и преобразования в формат базы знаний программиста будет использован инструмент ANTLR Parser Generator http://www.antlr.org/ Необходимо создать файл описания грамматики и сгенерировать основу своего компилятора. На сайте есть пример файла грамматики ASM.g http://www.antlr.org/grammar/1199244414545/ASM.g для какого-то диалекта ассемблера. FASM имеет другой диалект синтаксиса. И необходимо выполнить редактирование этого файла. В книге ЮроваВ.И. "Ассемблер. Учебник для вузов" http://assembler.openlib.by.ru/books/1.htmlесть глава "Синтаксис языка ассемблера" и достаточно просто внести изменения в файл грамматики ASM.g для обработки исходных тестов программ на языке FASM.

    ANTLR Parser Generator имеется инструмент генерации модуле лексического и синтаксического разбора исходных кодов языков программирования. Создаем автоматически эти модули и далее создам XML-представление исходного кода программы.

    Вернусь к "выполнению программы на лету" в браузере. Откройте ссылку на сайте робота-программиста "Ванюши" http://www.robot-ivan.narod.ru/samples/TextCodeOberonScript.html Демонстрируется выполнения кода программы на языке Oberon.

    Мне интересно автоматически транслировать исходные коды компилятора на языке FASM в исходные коды языка Oberon и в перспективе компилировать для целевого процессора. Это позволит иметь клон flat assembler компилятора на языке высоко уровня Oberon.
     
  14. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Формат хранения исходных кодов программ

    Введение

    MetaLP - это расширенный метаязык описания компьютерных программ. Цель языка однозначный перевод исходных программ, написанных на диалектах других языков программирования ASM, С, C++, Modula-2, Pascal, Java, 1C и др. из текстового вида (текстовой файл) в структурный вид на языке XML. Отличительной особенностью метаязыка является интеграция с инженерной базой знаний программиста.

    Почему текстовый вид хранения кода программ устарела?

    При создании программного продукта используются разнообразные системы управления проектами. Практически большенство инструментов (IDE) создают и сохраняют исходные тексты программ в обычном текстовом виде. При сборке проекта компилятор проходит этапы компиляции:

    * Лексический анализ
    * Синтаксический анализ
    * Семантический анализ
    * Генерацию промежуточного кода
    * Оптимизацию кода
    * Целевую генерацию кода


    Фактически из-за текстового хранения кода программы компилятор вынужден восстанавливать смысл закодированный человеком в код программы и тратить аппаратные ресурсы.

    При хранении в формате XML, структурном виде, первые три этапа исключаются! Скорость генерации кода в целевую среду резко увеличится, особенно для больших проектов.

    Лабораторные опыты

    Создадим простую программу, классическую, на разных языках программирования:
    а) Диалект ASM:
    - исх. код http://robot-ivan.narod.ru/samples/HelloRobot.asm
    - целевой код X86 http://robot-ivan.narod.ru/samples/HelloRobot_FASM.exe
    б) Диалект С++:
    - исх. код http://robot-ivan.narod.ru/samples/HelloRobot.c
    - целевой код X86 http://robot-ivan.narod.ru/samples/HelloRobot_CPlusPlus.exe
    в) Диалект MODULA-2:
    - исх. кодhttp://robot-ivan.narod.ru/samples/HelloRobot.m
    - целевой код X86 http://robot-ivan.narod.ru/samples/HelloRobot_MODULA.exe
    Г) Диалект JAVA:
    - исх. код http://robot-ivan.narod.ru/samples/HelloRobot.java
    - апплет http://robot-ivan.narod.ru/samples/HelloRobot.HTM

    Выполним тестовый перевод [1] описания исходного кода программы с языке С++ на MetaLP расширенный метаязык описания компьютерных программ:
    - http://robot-ivan.narod.ru/samples/CPlusPlusToMLP.xml

    Какие полезные свойства получаем?

    1. Экспорт исходного кода программ в формат TXT - 'ДА, ПРОСТО'
    2. Экспорт с раскраской синтаксиса диалекта языка COLOR -'ДА, ПРОСТО'
    3. Конвертация исх. текста на другую кодировкой - 'ДА, ПРОСТО'
    4. Подсчет статистики (кол-во переменных, функций и т.д.) - 'ДА, ПРОСТО'
    ...
    ПРОДОЛЖЕНИЕ СЛЕДУЕТ
     
  15. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    антлр живет на жабе и компилит в нее же. досе было про бб, вроде.

    ядро фасма написано на фасме и без (практически?) макросов. достаточно скомпилить это ядро и оно само скомпилит остальное.
    для асма без макросов не нужен компилятор компиляторов. достаточно 3-4 таблиц и 3-4 функов.

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

    или вы собираетесь сделать общий для кучи лангов п-код и общие дальнейшие библиотеки/линкер/машкод генераторы? а в чем тогда тут цимис хмл?

    колоризеры и прочие трансляторы-конвертеры-обработчики достаточно легко (не для всех лангов. но если вы на полную поддержку С++ зубы точите, то счастливого пути) лепятся на любимом компилере компилеров, зачем тут еще чтото промежуточное?

    (если вы все еще любите бб, то напишите, может, пошаговый тутор (руководство) по сборке модуля в отдельную вынь-прогу/либу (без лишнего бб окружения). и въюзывания внешних С/С++ частей. чегото я не совсем догнал в свое время из доки. ибо без проработки этих деталек, имхо, бб красив, любопытен, но мало юзабелен для практических (ком) целей.)

    регардс
     
  16. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Благодарю за поддержку обсуждения.

    (1) ANTLR Parser Generator - имеется и для других языков C, C++, Modula и др. Для BlackBox имеется компилятор компиляторов COCO/R. Поэтому, который испытал и убедился - генерирует код из описания грамматики языка ENBF формы. Мне очень понравился ANTLR , особенно автор. Смотрел и слушал его выступление в Седнее с докладом о компиляторе компиляторов.

    В практике использования языков программирования, даже детишек от одного папаши, раздражает многократные трудности переносимости проектов с одного диалекта в другой. Всё приходится делать руками. То комментарии имеют другой стиль и все комментарии нужно руками править, то ключевые слова отличаются чуточку, то ключевые слова и имеют разные регистры и локализацию. Даже ассемблер FASM имеет отличия версии от версии и мне неудаётся компилировать простые исходники на разных версиях. Разработчики пишут текстовые файлы для кодеров отличий версий, но ясно одно - диалекты не позволяют "писать на века" ! А если мы имеем разные кодовые страницы для исходных кодов? Русский текст просто "ломается". Такая же картина для других стран и других носителей языков кроме "могучего американского".

    Summary: Объективных инструментов измерения разности грамматики языков программирования, пусть даже простого как ассмеблеры, не существует. Это объясняется тем, что файл грамматики не прикладывают обычно к компилятору и сравнить отличия невозможно.
    Необходимо каждой исходной программы в базе знаний программиста иметь ссылку на файл описания грамматики языка.


    (2) - FASM или любой другой ассемблер - фундамент языков программирования высокого уровня. Без понимания как кодогенерит компилятор понять работу, а тем более качественный код практически не возможно. И умение использовать исходный коды и реализацию оптимизации очень важно для базы знаний программиста. FASM или GASM позволяет иметь доступ к любому ресурсу компьютеру и операционным системам. И, свойство сам себя компилировать, также очень важно для полноценного компактного инструмента делать программы.

    (3) XML - как формат для хранения структур данных - вполне подходит. Важное свойство - это однозначное описание и независимость от кодовой страницы. Всегда можно получить 100% совместимость и переносимость данных без потерь. Конечно неповоротливый, избыточный, но главное для меня совместимость и переносимость.

    (4) Задача хранить ВСЕ атрибуты исходного кода и простыми конвертами получать на выходе текстовый исходный код для конкретного языка и диалекта. Для языка, например С++, это описание в XML полностью совпадающую со стандартными описанием языка. Тогда будет прямое и прозрачная связь исходного кода и в контексте конкретного языка программирования.
    Исходный код программы в TXT формате требует обязательное восстановления контекста, т.е. использование настоящего компилятора.

    Для XML формата с атрибутами уже все за фиксировано однозначно на основании стандарта конкретного языка. Можно сразу и напрямую трансформировать из XML в код ассемблера и получение кода на целевой процессор.

    (5) Цель - настоящая автоматизация технологии программирования с участием человека и повторное использование исходных кодов программ.

    (6) Здесь активно обсуждаются вопросы компиляции и использования BlackBox http://forum.oberoncore.ru/
     
  17. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    vladfind
    хорошо сказано. мне тоже он толи на гербалайфщика, толи на свидетеля иеговы показался. хотя, антлр не так уж и плох.

    линк, плиз. когда я его видел в последний раз оно хотело только жабу.

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

    int foo1(){
    char *p1, *p2, *b = alloca(&foo2 - &foo1);

    for(p1 = &foo1, p2 = b; p1++ < &foo2; *p2++ = *p1);

    return ((int (*)())b)();
    }

    int foo2(){}

    когда справитесь, придумаю примеры посложнее. с объектами, с мета-элементами. активно использующие самомодификацию. думаете таких лангов мало или они малораспространены?

    комп сам ничего не делает. для начала все это надо смочь ручками. если ручками не получается или плохо получается, то ком не поможет.

    для начала - сколько языков вы способны охватить самостоятельно для ваших целей? только потомков алгола/фортрана или и и другие знаете? например, варианты мл, схемы (забыл как ее более известно)?

    например, потренируйтесь на конвертере перл --> паскаль. ну, или оберон.

    спасибо. но форум я могу найти и сам. и доку читал. но хотелось бы несколько туторов по вопросу. от начала и до конца. слов можно много не писать. только что делать.
    не знаю как вам сказать, но нет времени обсуждать и разбирать. а вы уже в теме. вам это нравится. и, кроме того, если этот вопрос еще не вставал перед вами, то еще встанет. поэтому вам, как минимум проще в это дело вникнуть и объяснить другим (мне, например) что там и как.
     
  18. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Начну с Вашего примера.

    Фрагмент исходного кода во "всей красе" показывает несовершенство передачи контекста и, как следствие, потерю переносимости.


    Моя задача компилировать исходный код и выполнить на целевом процессоре.

    Окружение.

    Часто бывает и, ваш пример кода на С или С++ требует тщательного описания условия положительного результата. У меня следующее окружение windows xp sp3, ide netbeans, компилятор MinGW g++ (gcc-3.4.5-20060117-3), процессор amd64.

    Попытка компиляции.

    Создаю проект app в beans. Копирую и вставляю код.

    Ошибки:
    main.cpp: In function `int foo1()':
    main.cpp:16: error: `foo2' was not declared in this scope
    main.cpp:16: error: `alloca' was not declared in this scope
    main.cpp:18: error: cannot convert `int (*)()' to `char*' in assignment

    Поиск функции alloca() в дереве инструмента. Нашёл - __builtin_alloca().

    Добавляю в пример строчки:

    # define alloca(size) __builtin_alloca (size)
    int foo1();
    int foo2();

    Ошибки:

    main.cpp: In function `int foo1()':
    main.cpp:16: error: ISO C++ forbids using pointer to a function in subtraction
    main.cpp:16: error: invalid conversion from `void*' to `char*'
    main.cpp:18: error: cannot convert `int (*)()' to `char*' in assignment
    main.cpp:18: error: comparison between distinct pointer types `char*' and `int (*)()' lacks a cast

    Выводы:

    Итого:
    1) Поиск подсказки в Интернете 20 мин.
    2) затраченного времени на попытки компилировать пример 40 мин.
    3) Ответ автору 20 мин.

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

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

    В базу знаний программиста необходимо импортировать весь контекст и окружение, и исходного кода, и всех заголовочных файлов, и конкретной версии компилятора.

    Ваш пример можно "руками" перевести в XML-представление, добавляя по пути весь контекст для получения важного свойства исходного кода программы - повторное использования.

    Если бы я ставил интегральную оценку IQa (коэффициент интеллекта приложения), то равна 0. :)

    Цель накопления знаний программиста это и есть увеличение IQa до 100 ед.

    Примечание:
    Мой уровень компетенции в С и С++ выше начального и для профессионала не составит труда быстро изменить пример и скомпилировать, но кто хотя бы морально компенсирует мои пустые траты минут?
     
  19. vladfind

    vladfind New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2005
    Сообщения:
    64
    Адрес:
    Лен. обл., г. Кириши
    Ссылка на другие языкы программирования с использованием файла грамматики для кодогенерации:
    1. http://www.antlr.org/wiki/display/ANTLR3/Code+Generation+Targets
    2. http://www.antlr.org/wiki/display/ANTLR3/ANTLR3+Code+Generation+-+C для языка С.

    Пока использую версию Java для описания грамматики диалекта ассемблера FASM_168.g и получение лексического анализатора и парсера на языке java. Удобно то, что можно и в linux использовать для проверки эквивалентной генерации целевого кода в среде os linux.

    Достоинства хранения исходного кода в формате XML:

    (1) - не чувствительность к кодовой страницыж
    (2) - с идентификаторами можно хранить все необходимые атрибуты;
    (3) - однозначная разметка используемых данных;
    (4) - есть инструменты отображения структурированных данных и трансляция в другие представления.

    Первые версии трансляторов для макроязыка и хранения метаданных использовал во внешней обработке http://www.robot-ivan.narod.ru/eximsp.zip Выбран был простейший формат TXT и упаковка таблиц в виде слов в кавычках и строк. Работает быстро, но искать, добавлять, обрабатывать данные не представляется возможным. Для этого требуется обратно развернуть из файла TXT в память метаданные. Здесь можно посмотреть сгенерированный xml-файл метаданных макроязыка 1С программирования (из-за отсутствия лексического и парсер анализаторов, импортированный из файла метаданных исходные коды 1c:7.7 не удалось разобрать и добавить в xml-файл). - http://www.robot-ivan.narod.ru/is-mdatas.xml

    Для XML документов имеются "нативные" SQL базы. Один из открытых проектов XML-СУБД Sedna -http://modis.ispras.ru/sedna/index.html Bvttncz API-интерфейс для других языков программирования, в том числе и для web-технологий. База знаний программиста именно в XML формате будет храниться и для производительности использоваться "нативная" XML-СУБД.

    Цель моей автоматизации, чтобы "ручками" нужно делать один раз и далее многократно и корректно использовать фрагменты кода в других проектах найденные решения и (всегда должен получаться работающий код).
     
  20. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    vladfind
    фиг поймешь ваш квадратный стиль написания. совсем ничего не понял насчет контекста, переносимости и ваших проблем с обычным аллокатором памяти из стека.
    ваша критика моего кода вообще странна. то, что вы потратили час на "оптимизацию" и "отладку" 5 строчек банального кода, это не моя, а ваша проблема. код этот очень прост и стандартен, на уровне хэловорда.
    Код (Text):
    1. #include <malloc.h>
    2.  
    3. void foo2();
    4.  
    5. int foo1(){
    6.   char *p1, *p2, *b = alloca((char*)&foo2 - (char*)&foo1);
    7.  
    8.   for(p1 = (char*)&foo1, p2 = b; p1 < (char*)&foo2; *p2++ = *p1++);
    9.  
    10.   return ((int (*)())b)();
    11. }
    12.  
    13. void foo2(){}
    14.  
    15.  
    16. int main(){
    17.  foo1();
    18. }
    собирается мсвс2003/2008 и запускается без единого варна (без ретипизаций с варнами)
    на практике применяются коды значительно сложнее.

    вы должны понимать, что для создания любого автомата/робота, вы должны мочь до выполнить его задачу ручками. причем, достаточно просто и стандартно. если вы не можете это сделать, то ищите такие возможности. хэловорды переводить, обычно, легко. но это только хэловорды. вы хотите остановиться на них?

    как новичок профессионалу имеющеve уровень компетенции в С и С++ и IQ выше я привел вам листинг и команду компилятору. юзайте. не думаю, что ось и разрядность тут имеют какое либо значение. мингв гцц, проверил, компилит тоже. без ошибок и варнов. но как ним линкить забыл уже.

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

    возвращаясь к вашим попыткам завернуть абсолютно все в волшебный хмл.
    учитывая вашу любовь к гуглю - потрать пару ваших драгоценных вам недель и нагуглите пару хороших книг по поскрипту и примеры програм на нем. попробуйте придумать достаточно универсальный и не противоречащий другим синтаксисам алгоритм для перевода из него в ваш хмл. поскрипт файлы, обычно, имеют расширение .ps пожатые, часто, .ps.gz .ps.Z .ps.bz2

    ничего, что я трачу свое время на вас? компенсировать, однако, не хотите?

    когда справитесь - еще примеров будет.
    и переводите, а не рассуждайте. я новичок и мой IQ == -100, поэтому ваших рассуждений все равно не пойму.


    насчет ссылок - спасибо. потом посмотрю что это за

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

    а зачем вам вообще нужен хмл? ведь вы все равно озаботитесь кучей парсеров. зачем вам нужен какойто "универсальный" хмл? перводите в п-код, как делают все, и дальше линкуете, интерпретируете, транслируете в асм или машкод. по усмотрению. когда восстановится инет, если хотите, могу вам показать одну-две такие системы. (вроде, и .нет так устроена)