Возможный использовать Платформу/Компоненты Flex, не используя MXML?

Я понимаю, что выводимый вывод отладки генерируется в синтаксическом анализаторе, а не из сканера. Лучший способ увидеть вывод отладки в сканере - сгенерировать сканер с помощью параметров командной строки -d или --debug или поместить %option debug в определение гибкого сканера. Это будет печатать строку в stderr для каждого согласованного правила.

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

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

{some_pattern}       { /* DO NOT DO THIS */ yylval.str = yytext; 
                       return SOME_TOKEN;
                     }

Значение yytext и памяти, на которую он указывает, являются приватными для сканера yylex, и значения могут меняться без уведомления. В частности, после того, как yylex снова вызван, чтобы отсканировать токен, он может быть перемещен непредсказуемым образом.

Вместо этого вы должны сделать копию строки токена (и не забудьте освободить копия, когда она вам больше не нужна):

{some_pattern}       { yylval.str = strdup(yytext); 
                       return SOME_TOKEN;
                     }

Примечание. Если вы не хотите использовать strdup (возможно, потому, что ваш токен может содержать символы NUL), хорошей альтернативой является:

char* buf = malloc(yyleng + 1); /* No need to call strlen */
memcpy(buf, yytext, yyleng);    /* Works even if there is a NUL in the token */
buf[yyleng] = 0;                /* Remember to NUL-terminate the copy */

Ссылки: flex manual note on yytext / bison FAQ по уничтоженным строкам

19
задан davr 8 October 2008 в 20:14
поделиться

4 ответа

Я сделал простую начальную загрузку, подобную Borek (см. ниже). Я хотел бы избавиться от mxml файла, но если у меня нет его, я не получаю ни одной из стандартных тем, которые идут с Flex (haloclassic.swc, и т.д.). Кто-либо знает, как сделать то, что предлагает Theo, и все еще стандартные темы применялись?

Вот мой упрощенный метод начальной загрузки:

<час> main.mxml

<?xml version="1.0" encoding="utf-8"?>
<custom:ApplicationClass xmlns:custom="components.*"/>

ApplicationClass.as

package components {
    import mx.core.Application;
    import mx.events.FlexEvent;
    import flash.events.MouseEvent;
    import mx.controls.Alert;
    import mx.controls.Button;

    public class ApplicationClass extends Application {
        public function ApplicationClass () {
            addEventListener (FlexEvent.CREATION_COMPLETE, handleComplete);
        }
        private function handleComplete( event : FlexEvent ) : void {
            var button : Button = new Button();
            button.label = "My favorite button";
            button.styleName="halo"
            button.addEventListener(MouseEvent.CLICK, handleClick);
            addChild( button );
        }
        private function handleClick(e:MouseEvent):void {
            Alert.show("You clicked on the button!", "Clickity");
        }
    }
}

Вот необходимые обновления для использования его с Flex 4:

main.mxml

<?xml version="1.0" encoding="utf-8"?>
<local:MyApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="components.*" />

MyApplication.as

package components {
    import flash.events.MouseEvent;
    import mx.controls.Alert;
    import mx.events.FlexEvent;
    import spark.components.Application;
    import spark.components.Button;

    public class MyApplication extends Application {
        public function MyApplication() {
              addEventListener(FlexEvent.CREATION_COMPLETE, creationHandler);
        }
        private function creationHandler(e:FlexEvent):void {
            var button : Button = new Button();
            button.label = "My favorite button";
            button.styleName="halo"
            button.addEventListener(MouseEvent.CLICK, handleClick);
            addElement( button );
        }
        private function handleClick(e:MouseEvent):void {
            Alert.show("You clicked it!", "Clickity!");
        }
    }
}
13
ответ дан 30 November 2019 в 04:12
поделиться

Это - очень простое приложение, которое делает только основную начальную загрузку в MXML. Это - MXML:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">
  <mx:Script source="Script.as" />
</mx:Application>

Это - Script.as:

import mx.controls.Button;
import flash.events.MouseEvent;
import mx.controls.Alert;
import mx.core.Application;

private function onCreationComplete() : void {
  var button : Button = new Button();
  button.label = "Click me";
  button.addEventListener(MouseEvent.CLICK, function(e : MouseEvent) : void {
    Alert.show("Clicked");
  });

  Application.application.addChild(button);
}
9
ответ дан 30 November 2019 в 04:12
поделиться

ПРИМЕЧАНИЕ: ниже ответа не будет на самом деле работать, если Вы не инициализируете библиотеку Flex сначала. Существует много кода, включенного, чтобы сделать это. См. комментарии ниже, или другие ответы для получения дополнительной информации.

<час>

основной класс не должен даже быть в MXML, просто создать класс, который наследовался от mx.core.Application (который является тем, что класс MXML с <mx:Application> корневой узел компилируется как так или иначе):

package {

  import mx.core.Application;


  public class MyFancyApplication extends Application {

    // do whatever you want here

  }

}

кроме того, любой код ActionScript, скомпилированный с mxmlc компилятор - или даже, инструмент разработки Flash CS3 - может использовать классы Flex, это - просто вопрос предоставления доступа к ним в пути к классу (относящийся к платформе SWC при использовании mxmlc или указывающий на папку, содержащую источник при использовании любого). Если класс документов не наследовался от mx.core.Application, Вы могли бы работать в к некоторой проблеме, тем не менее, так как некоторые вещи в платформе принимают это дело обстоит так.

7
ответ дан 30 November 2019 в 04:12
поделиться

Да, просто необходимо включать гибкий провод swc в путь к классу. Можно найти flex.swc в гибком проводе sdk в редактировании frameoworks/lib/flex.swc

: Еще одна вещь: при использовании Разработчика Flex, можно просто создать новый проект ActionScript, который по существу сделает то же как выше.

0
ответ дан 30 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: