трансляция

Тема в разделе "WASM.HEAP", создана пользователем osrootd, 25 авг 2008.

  1. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Не знал как назвать топик...
    В общем, решил сделать как у гугла. У них есть транслятор с Java на JS
    Еще у кого-то есть язык СИ для клиента (web)

    Вот хочу сделать танслятор с PHP на JS.

    Короче застрял вот на чем:
    Объекты, определения ф-ций и операторы "+-/= == " я осилил.
    А как осилить базовые конструкции языка?
    Ну типа if, for, while, switch...
    Ну не доходит до мня. Копать исходники гугла - на это месяц уйдет, так как в них черт ногу сломит.

    Есть идея вообще их не использовать. В смысле вместо for создать новую инструкцию, например loop и ввести глобальный счетчик итераций, а IF обрабатывать операторами сравнения.
    Или описать их как объекты?
     
  2. Johnikum

    Johnikum Member

    Публикаций:
    0
    Регистрация:
    6 июн 2003
    Сообщения:
    97
    для начала читать "Ахо - компиляторы, Принципы, технологии, инструменты", книги по регулярным выражениям и т.д.
    а идея написания транслятора php -> javascript есть и у меня, правда пока нет времени
     
  3. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Johnikum
    Я не так выразился. Имелось в виду объектный транслятор. Тут чистое ООП + GOF

    Хочу добиться след. результата:

    <script language=php>
    myPage->myObject->myMethod();
    </script>

    Это чтоб на стороне клиента обрабатывалось.

    GWT (Google Web Toolkit) применяет синтакс анализатор, но у нее задачи другие. У нее с компиляцей, а у меня - НА ЛЕТУ.
     
  4. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Вот щас выполнил автодокументацию по своей проге.

    вот выход
    Тут принцип One2Many
    Один код к МНОЖЕСТВУ экземпляров.
     
  5. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Вот конечный код веб страницы с инклудом транслятора

    Код (Text):
    1. <?
    2.     require_once ("config.inc");
    3.     require_once ("webpage.inc");
    4.     require_once ("WebObject.inc");
    5.     require_once ("menu.inc");
    6.     require_once ("event_listeners.inc");
    7.  
    8.     $page = new webpage();
    9.    
    10.         $page->setDocumentTypeDefinition ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
    11.         $page->setPageEncoding ("utf8");
    12.         $page->setPageTitle ("ОАО Рога и копыта");
    13.  
    14.     $header = new PageHeader();
    15.     $header->setHeaderText("<b>ОАО<br />Рога и копыта");
    16.     $header->setSomeText(":)");
    17.    
    18. //1
    19.     $page->getContentContainer()->add($header);
    20.  
    21.     $AboutMI = new MenuItem ("О компании", "M_ABOUT");
    22.  
    23. Class ML extends MenuItemListener
    24. {
    25.  
    26.     public function menuItemActivated( $Menu_Event ){
    27.  
    28.     if ( $Menu_Event->getSource()->getID()=="M_ABOUT" )
    29.     {
    30.         // Что-то сделать
    31.     }
    32.  
    33.     }
    34.  
    35. }  
    36.    
    37. $MainMenuBar = new PageMenu();
    38. $MainMenuBar->setMenuTitle ("Выберите раздел");
    39.  
    40. $MainMenuBar->add ($AboutMI);
    41.  
    42. $page->getContentContainer()->add ($MainMenuBar);
    43.  
    44. $page->generate();
    45.  
    46. ?>
    Щас вот пытаюсь события на стороне клиента обрабатывать...
     
  6. Johnikum

    Johnikum Member

    Публикаций:
    0
    Регистрация:
    6 июн 2003
    Сообщения:
    97
    нечто подобное делал, правда без объектов.

    я так понял сами объекты написаны на js, c оберткой на php?

    а события инициируемые сервером будут?

    я вообще избрал другой путь (этот возможно позже).
    - есть клиентская сторона, польностью js
    - есть серверная php и др.
    события обрабатываются на клиенте, и при необходимости на сервере
     
  7. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Отчасти

    Тут модель событий.

    Вот иерархия классов (на начальном этапе)
    AbstractEvent
    HyperLinkEvent
    MenuItemEvent
    MouseEvent
    KeyEvent
    ActionEvent

    ClientObject
    PageMenu
    EventListener
    HyperlinkListener
    MenuItemListener
    MouseListener
    KeyboardListener
    ActionListener

    WebObject
    WebComponent
    MenuItem
    PageHeader
    Button
    TextField
    TextArea
    TextLabel
    HyperLinkLabel
    Table
    List
    ComboBox
    UserForm
    WebContainer
    PageMenu
    webpage

    Класс WebObject - Абстрактный и имеет операцию generate(), которая отвечает за создание HTML кода

    WebContainer - Это компонент страницы, способный содержать в себе другие компоненты, и имеет метод add ()
    WebPage - НЕ КОНТЕЙНЕР, но может добавлять в себя содержимое через getContentContainer()->add()

    У суперкласса WebComponent также есть методы setVisible(), toSource() и notify(), последний отвечает за принудительный вызов события.

    Вот так я разогнался.
     
  8. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Кстати, событие использует указатели:)))

    да да, в PHP:

    Код (Text):
    1. ...
    2.  
    3. function mouseClicked ($MouseEvent){
    4.  
    5. // MouseEvent содержит инфу о мышенажатии: Кто, Как, что делать...
    6.  
    7. }
    8.  
    9. ...
     
  9. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Кто в курсе, в PHP 4 Можно вызывать переопределенную функцию в самой ф-ции?

    function a(){
    //что-то сделать
    }

    function a(){
    что-то
    $this::a();
    что-то
    }

    В PHP5 можно, а тут че то никак
     
  10. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    osrootd
    в свое время мне очень помог цикл статей "LET'S BUILD A COMPILER!" By Jack W. Crenshaw, Ph.D. очень советую.
    http://compilers.iecc.com/crenshaw/
    пятая глава как раз про управляющие конструкции.
     
  11. Johnikum

    Johnikum Member

    Публикаций:
    0
    Регистрация:
    6 июн 2003
    Сообщения:
    97
    В отличие от некоторых других объектно-ориентированных языков, РНР не позволяет выполнять перекрытие функций, сохраняя возможность вызова версии, определенной в родительском классе.
    (C) Лаура Томсон, Люк Веллинг - РНР и Муsql. (речь в книге о PHP4)
     
  12. osrootd

    osrootd New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2008
    Сообщения:
    1.086
    Щас просто сайт пишу
    Вот там на Java написал такую ф-цию

    public void generate (java.io.PrintWriter out){

    out.println("<div id=\"menu\"><ul>");
    super.generate(out);
    out.println("</ul></div>");

    }

    На PHP видимо никак так не сделать.
     
  13. Johnikum

    Johnikum Member

    Публикаций:
    0
    Регистрация:
    6 июн 2003
    Сообщения:
    97
    php4 не ООП язык. так что есть 2 пути: не использовать "недообъектность", либо перейти на php5, там с этим делом лучше
     
  14. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    varnie
    По русски есть. В куче мест. На инфанте, например.