Форум сайта python.su
Доброго времени суток.
Я выполняю курсовую работу по проектированию транслятора кода (Перевод кода Паскаль в аналогичный код на С++).
Этапы анализа делятся на
program test;
begin
writeln('123');
end.
tokens = [['Lx_PR', 'program'], ['Lx_ID', 'test'], ['Lx_SMCLN', ';'], ['Lx_BGN', 'begin'], ['Lx_WRT', 'writeln'], ['Lx_LBR', '('], ['Lx_STR', '\'123\''], ['Lx_RBR', ')'], ['Lx_SMCLN', ';'], ['Lx_END', 'end'], ['Lx_DOT', '.']]
Отредактировано dmitriyLutsenko (Июнь 28, 2022 16:42:09)
Офлайн
Если вбить в гугл “абстрактное синтаксическое дерево” то он выдаст примерно килотонну статей, учебников, и примеров на тему, как построить AST. Вы думаете, что кто-то вам сейчас в двух словах объяснит лучше, чем это написано в учебнике?
Офлайн
FishHookВ чем Ваша проблема? Что за пассивная агрессия? Может, у Вас нет опыта написания проектов схожей тематики, но за других -то не надо говорить.
Если вбить в гугл “абстрактное синтаксическое дерево” то он выдаст примерно килотонну статей, учебников, и примеров на тему, как построить AST. Вы думаете, что кто-то вам сейчас в двух словах объяснит лучше, чем это написано в учебнике?
Офлайн
dmitriyLutsenkoЭто не помогло бы тебе вообще никак.
Я бы с удовольствием использовал библиотеку PyPY (Lex - Yacc)
dmitriyLutsenkoНужно построить дерево вывода. Из дерева вывода получается система правил. И дальше для этой системы правил пишется набор функций, которые по этим правилам разбирают входной текст. Один разбор по системе правил - это синтаксический распознаватель только. Он определяет, является ли цепочка правильной для языка таких цепочек.
- Какой подход необходимо применить при написании абстрактного синтаксического дерева? Хотя бы на том списке токенов, который я привел?
dmitriyLutsenkoДа это самое простое во всей этой истории. Теперь для токенов надо построить систему правил языка правильных цепочек этих токенов. Правильная цепочка принадлежит языку. Неправильная цепочка не принадлежит языку. Языком называется множество всех правильных цепочек.
Лексический анализ: проводится парсинг кода Паскаль на токены.
Офлайн
py.user.nextтолько раз в качестве лабораторной работы теории автоматов писал перевод цикла for в while (Автомат Мура). И то, работал не очень Но это было очень давно и писал на java.
Изучал вообще хоть что-нибудь из этого?
py.user.nextЧто же, значит, освежу память и реализую ДКА, хотя там переходов будет будь здоров.
Думаю, тебе может понадобиться детерминированный конечный автомат с магазинной памятью для всего этого.
Прикреплённый файлы:
SysProgSoft.zip (18,8 KБ)
Офлайн
dmitriyLutsenkoКак ты отличишь точку в вещественном числе от точки в конце программы? Как ты отличишь плюс между числами от плюса между строками? Лексемы из лексического анализатора будут приходить одни и те же. Нужны правила.
Заодно скину то, над чем работаю.
dmitriyLutsenkoДа не реализуешь ты ничего.
Что же, значит, освежу память и реализую ДКА
dmitriyLutsenkoС чего ты взял, что класс должен что-то на экран выводить? Это не только для питона уровень новичка, но и вообще для любого другого языка.
Заодно скину то, над чем работаю.
Прикреплённый файлы:
attachment SysProgSoft.zip (18,8 KБ)
dmitriyLutsenkoТы просто не знаешь, что в Yacc точно так же надо сначала разработать систему правил самому, а потом уже на нём эти правила записывать. А если ты эти правила не разработал, то и записывать на нём будет нечего.
Я бы с удовольствием использовал библиотеку PyPY (Lex - Yacc)
Отредактировано py.user.next (Июнь 29, 2022 01:29:15)
Офлайн
py.user.nextИ что я, по твоему, должен на это ответить?
Да не реализуешь ты ничего.
Отредактировано dmitriyLutsenko (Июнь 29, 2022 07:25:16)
Офлайн
Короче, ребят, если не хотите помочь, просто игнорьте тему.
А то писать простыни текста, в котором указано, какой я рукозадый - просто трата времени.
Питоном на жизнь я не зарабатываю, а просто делаю свои учебные дела.
Офлайн
dmitriyLutsenkoНичего не отвечай, попробуй реализуй это. Можно реализовывать через Yacc, как ты говорил в начале, я разрешаю, со мной ты можешь быть полностью свободен в своём выборе. Когда ты это не реализуешь и через Yacc в том числе, ты придёшь сюда и тебе будут помогать, может быть.
И что я, по твоему, должен на это ответить?
dmitriyLutsenkoУ тебя код даже юнит-тестами не покрыт. О каком качестве ты говоришь? Если я его сейчас покрою юнит-тестами, они тут же вскроют 100500 ошибок, которые потом ещё и исправлять за тебя надо будет, потому что сам ты будешь рассказывать нам всем тут, как ты можешь эти ошибки исправить и как учился в каком-то там году их исправлять. Зачем мне время на это тратить? Ну, не могёшь ты, не могёшь. Об этом я и говорю. Кришнаит такой, с розовыми соплями, одной ногой в канализационном люке, жрёт с помойки и со столиков в Макдональдсе тайком, где люди не доели еду и оставили крошку-картошку, но при этом счастлив и всем говорит “да вы ничего не понимаете просто! а я-то понимаю как раз! я счастье напрямую черпаю из космоса! а вы дураки все! ха-ха-ха-хари-хари-рама!”.
Код у меня г…но
dmitriyLutsenkoЭто не простыни текста, я их пишу за три минуты все, потому что когда-то давно, в 2002 году, уделил этому кучу времени и научился набирать вслепую и десятью пальцами, так как мне это надо было для дела. Компьютерный человек всегда всё подбирает под своё дело.
А то писать простыни текста
dmitriyLutsenkoНапиши транслятор, который хотя бы пустую программу на одном языке в пустую программу на другом языке транслирует. Начни с этого. Это такой Hello World в компиляции.
Есть что добавить?
Отредактировано py.user.next (Июнь 29, 2022 09:46:01)
Офлайн
py.user.next
таблетку забыл выпить?
py.user.next
Напиши транслятор, который хотя бы пустую программу на одном языке в пустую программу на другом языке транслирует. Начни с этого. Это такой Hello World в компиляции.
dmitriyLutsenko
Я выполняю курсовую работу по проектированию транслятора кода (Перевод кода Паскаль в аналогичный код на С++).
Офлайн