Size: a a a

Compiler Development

2020 June 23

f

fldlg2 in Compiler Development
Не о процессе. Расположение лексем и всё такое — это не процесс, это исходная информация.
источник

AT

Alexander Tsukanov in Compiler Development
Например для выражения x * y в дереве разбора будет вся матрешка приоритетов.
В ast будет только умножение. Это ведь не потеря информации
источник

AT

Alexander Tsukanov in Compiler Development
расположение лексем и в AST можно сохранить )
источник

f

fldlg2 in Compiler Development
В AST, например, может не сохраниться информация, были ли скобки вокруг x * y.
источник

AT

Alexander Tsukanov in Compiler Development
это зависит от разраба же
источник

AT

Alexander Tsukanov in Compiler Development
это не свойство AST самого по себе
источник

f

fldlg2 in Compiler Development
Если она не нужна — значит, не нужна. А если нужна, то parse tree — логичный её источник.
источник

f

fldlg2 in Compiler Development
Да, лично дело каждого.
источник

AT

Alexander Tsukanov in Compiler Development
источник

f

fldlg2 in Compiler Development
Некоторые вот программы компилируют во время исполнения, и ничего. Хранить информацию о лексемах в AST — ничуть не предосудительнее в наше время 😉
источник

А

Алексей ayaye :)... in Compiler Development
AST - это проекция дерева разбора. что там оставлять - зависит от последующих задач
источник

f

fldlg2 in Compiler Development
Алексей ayaye :)
AST - это проекция дерева разбора. что там оставлять - зависит от последующих задач
Если это реплика мне, то мне нечего возразить.
источник

AT

Alexander Tsukanov in Compiler Development
Тут важно просто отметить, что имхо говорить о потере информации в AST не вполне верно.
Ситуация вывернута на изнанку. На самом деле дерево разбора скорее содержит мусор, от которого вы избавляетесь в AST.
Шиворот навыворот короче )
источник

AT

Alexander Tsukanov in Compiler Development
По крайней мере так я понял ситуацию из книг. Поправьте если ошибаюсь
источник

f

fldlg2 in Compiler Development
Alexander Tsukanov
Тут важно просто отметить, что имхо говорить о потере информации в AST не вполне верно.
Ситуация вывернута на изнанку. На самом деле дерево разбора скорее содержит мусор, от которого вы избавляетесь в AST.
Шиворот навыворот короче )
Зависит от задачи.
источник

AT

Alexander Tsukanov in Compiler Development
Ну если мне важно видеть как шел вывод, то да.
Но это какие-то задачи для лингвистов скорее
источник

IK

Ivan Kochurkin in Compiler Development
В генераторах парсеров (ANTLR) можно создавать AST без вставок в парсере и не строя parse tree, которое еще может и много весить в памяти. Вот пример, но вообще планирую об этом тоже написать когда-нибудь, поскольку материала очень мало: https://github.com/PositiveTechnologies/PT.PM/blob/dev/Sources/PT.PM.PlSqlParseTreeUst/PlSqlAntlrListenerConverter.cs
источник

f

fldlg2 in Compiler Development
Alexander Tsukanov
Ну если мне важно видеть как шел вывод, то да.
Но это какие-то задачи для лингвистов скорее
Ну почему, для лингвистов. Например, Вы пишете препроцессор смеси языков, который на выходе сохраняет форматирование входного текста... Мало ли, какие задачи бывают.
источник

AT

Alexander Tsukanov in Compiler Development
fldlg2
Ну почему, для лингвистов. Например, Вы пишете препроцессор смеси языков, который на выходе сохраняет форматирование входного текста... Мало ли, какие задачи бывают.
У меня с этим нет проблем в AST ) в том то и дело.
Просто сохраняю список токенов с позициями, и из узлов на элементы ссылаюсь.
Соответственно могу восстановить текст обратно до буквы
источник

IK

Ivan Kochurkin in Compiler Development
Но это немного сложнее, так как это восходящяя обработка, а не нисходящая, как в визиторах.
источник