|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Apr 2014
Сообщений: 30
|
Нет ли у кого синтаксического анализатора для AS3
Нет ли у кого синтаксического анализатора для AS3?
Хотел написать транслятор AS3->Lua... Лексический анализатор уже сделал, но нет идей, как сделать синтаксический(работа с AST). Что посоветуете? Добавлено через 32 секунды Пишу транслятор на AS3 |
|
|||||
С Луа не работал, но адруинки подключал с помощью Сокета + SerialProxy + Firmata
Добавлено через 11 минут Где-то еще должны лежать "драйвера" для win/mac, которые пихаешь (устанавливал вместе с пакетом air) в системную папку, и анешка. Но я там всё переделывал, да и работало оно, в оригинале криво, если нужно скину. Добавлено через 16 минут если чё
__________________
return this... Последний раз редактировалось AlexCooper; 18.06.2015 в 15:01. |
|
|||||
Регистрация: Apr 2014
Сообщений: 30
|
То есть, это была не совсем трансляция, мне надо, чтобы на входе программы файлы as, на выходе файлы lua, то что вообще можно портировать я проверял...
Добавлено через 7 минут Да и еще у меня проблема с кодов в лексической анализаторе, может кто-нибудь догадается, че не так(должно отпределять тип лексемы, пока только id и package)? private function searchLexems(file:String):String { var arr:Vector<String> = file.split("$"); var n:String = " "; //это символ новой строки, и вроде, пробельные символы чистятся в другом месте, но все равно пусть будет) for (i in 0...arr.length) { arr.remove(""); arr.remove(n); } trace(arr);//до опредения типов лексем for (j in 0...arr.length) { var lexem:Lexem=null; if(eRegLexems[0].match(arr[j]) && eRegLexems[0].matched(0)==arr[j]){ lexem = new Lexem("ID", [arr[j]]); }else if(eRegLexems[1].match(arr[j]) && eRegLexems[1].matched(0)==arr[j]){ lexem = new Lexem("Package", [arr[j]]); } this.tokenWay.addLexem(lexem); } trace(arr);//после this.arrLexems=arr; return file; } public var eRegLexems:Array<EReg> = [/[A-Za-z][A-Za-z]|[1-9]/, /[A-Za-z][A-Za-z]|[1-9][;]/]; Добавлено через 10 минут Решено, чуть-чуть поправил условия. Всем спасибо, если еще возникнут вопросы, буду писать тут |
|
|||||
Да, верно, не совсем правильно соориентировался.
UPD: видел что Lua используют в робототехнике, но не знал, что скажет по этому гугл Цитата:
з.ы. не с могу Вам помочь, так как займет много времени, которым сейчас не рассполагаю
__________________
return this... Последний раз редактировалось AlexCooper; 18.06.2015 в 18:41. |
|
|||||
Регистрация: Apr 2014
Сообщений: 30
|
Не переживайте, ведь этот форум очень посещаем)
|
|
|||||
Как бы компиляторы открыты
http://hg.mozilla.org/tamarin-redux/...b2568f/esc/src https://fisheye6.atlassian.com/brows...n/compiler/src
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Я не переживаю) Просто руководствуюсь правилом "Взял мячь, так фигачь". Одним словом, начал отвечать - тему не бросай.
__________________
return this... |
|
|||||
Modus ponens
|
АС3 анализатор реализовать в полном объеме, да еще и вручую - это задача совсем не из легких... Ну и АС3 это очень неподходящий язык для этого. Если делать серьезно, то нужно браться за yacc / bison.
Если интересно какие языки подходящие: все, что может сопоставление с образцом, и чем больше, тем лучше. Т.е. кандидаты для рукописного парсера: Пролог, МЛ, Хаскел, Раст.
__________________
Hell is the possibility of sanity |
|
|||||
Не совсем понимаю точное определение синтаксического дерева.
Но вот эта либа (https://github.com/teotigraphix/as3-.../asblocks/impl) занимается построением дерева класса (AST). Как создание так и чтение. Вот что то такое позволяет делать: var ap:IASParser = af.newParser(); // Чтение класса из файла. var unit:IASCompilationUnit = ap.parse(fileData); var factory:ASFactory = new ASFactory(); var type:IASClassType = unit.getType() as IASClassType; // Добавление своего метода в класс var method:IASMethod = type.newMethod("drawUI", Visibility.PROTECTED, "void"); var cons:IASMethod = type.getMethod("Recipes"); var l:IList = cons.getStatements(); // Добавление операторов в метод method.setDescription("Autogenerated staff, please don`t modify!"); method.parseStatement("addChild(button1);"); method.parseStatement("button1.x=100;"); method.parseStatement("button1.y=100;"); method.parseStatement("button1.setSize(100,40);"); var il:IList = method.getStatements(); var sb:StatementBuilder = new StatementBuilder(); var ast:LinkedListTree = new LinkedListTree(); // Добавление поля класса var prop0:IASField = type.newField("button1", Visibility.PRIVATE, "Button" ); |
Часовой пояс GMT +4, время: 21:28. |
|
« Предыдущая тема | Следующая тема » |
Теги |
AS3 , AST , Lua , синтаксический анализатор |
|
|