Не знал как назвать топик... В общем, решил сделать как у гугла. У них есть транслятор с Java на JS Еще у кого-то есть язык СИ для клиента (web) Вот хочу сделать танслятор с PHP на JS. Короче застрял вот на чем: Объекты, определения ф-ций и операторы "+-/= == " я осилил. А как осилить базовые конструкции языка? Ну типа if, for, while, switch... Ну не доходит до мня. Копать исходники гугла - на это месяц уйдет, так как в них черт ногу сломит. Есть идея вообще их не использовать. В смысле вместо for создать новую инструкцию, например loop и ввести глобальный счетчик итераций, а IF обрабатывать операторами сравнения. Или описать их как объекты?
для начала читать "Ахо - компиляторы, Принципы, технологии, инструменты", книги по регулярным выражениям и т.д. а идея написания транслятора php -> javascript есть и у меня, правда пока нет времени
Johnikum Я не так выразился. Имелось в виду объектный транслятор. Тут чистое ООП + GOF Хочу добиться след. результата: <script language=php> myPage->myObject->myMethod(); </script> Это чтоб на стороне клиента обрабатывалось. GWT (Google Web Toolkit) применяет синтакс анализатор, но у нее задачи другие. У нее с компиляцей, а у меня - НА ЛЕТУ.
Вот щас выполнил автодокументацию по своей проге. вот выход Тут принцип One2Many Один код к МНОЖЕСТВУ экземпляров.
Вот конечный код веб страницы с инклудом транслятора Код (Text): <? require_once ("config.inc"); require_once ("webpage.inc"); require_once ("WebObject.inc"); require_once ("menu.inc"); require_once ("event_listeners.inc"); $page = new webpage(); $page->setDocumentTypeDefinition ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"); $page->setPageEncoding ("utf8"); $page->setPageTitle ("ОАО Рога и копыта"); $header = new PageHeader(); $header->setHeaderText("<b>ОАО<br />Рога и копыта"); $header->setSomeText(":)"); //1 $page->getContentContainer()->add($header); $AboutMI = new MenuItem ("О компании", "M_ABOUT"); Class ML extends MenuItemListener { public function menuItemActivated( $Menu_Event ){ if ( $Menu_Event->getSource()->getID()=="M_ABOUT" ) { // Что-то сделать } } } $MainMenuBar = new PageMenu(); $MainMenuBar->setMenuTitle ("Выберите раздел"); $MainMenuBar->add ($AboutMI); $page->getContentContainer()->add ($MainMenuBar); $page->generate(); ?> Щас вот пытаюсь события на стороне клиента обрабатывать...
нечто подобное делал, правда без объектов. я так понял сами объекты написаны на js, c оберткой на php? а события инициируемые сервером будут? я вообще избрал другой путь (этот возможно позже). - есть клиентская сторона, польностью js - есть серверная php и др. события обрабатываются на клиенте, и при необходимости на сервере
Отчасти Тут модель событий. Вот иерархия классов (на начальном этапе) 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(), последний отвечает за принудительный вызов события. Вот так я разогнался.
Кстати, событие использует указатели)) да да, в PHP: Код (Text): ... function mouseClicked ($MouseEvent){ // MouseEvent содержит инфу о мышенажатии: Кто, Как, что делать... } ...
Кто в курсе, в PHP 4 Можно вызывать переопределенную функцию в самой ф-ции? function a(){ //что-то сделать } function a(){ что-то $this::a(); что-то } В PHP5 можно, а тут че то никак
osrootd в свое время мне очень помог цикл статей "LET'S BUILD A COMPILER!" By Jack W. Crenshaw, Ph.D. очень советую. http://compilers.iecc.com/crenshaw/ пятая глава как раз про управляющие конструкции.
В отличие от некоторых других объектно-ориентированных языков, РНР не позволяет выполнять перекрытие функций, сохраняя возможность вызова версии, определенной в родительском классе. (C) Лаура Томсон, Люк Веллинг - РНР и Муsql. (речь в книге о PHP4)
Щас просто сайт пишу Вот там на Java написал такую ф-цию public void generate (java.io.PrintWriter out){ out.println("<div id=\"menu\"><ul>"); super.generate(out); out.println("</ul></div>"); } На PHP видимо никак так не сделать.
php4 не ООП язык. так что есть 2 пути: не использовать "недообъектность", либо перейти на php5, там с этим делом лучше