FreeBasic
Главная
Вход
Регистрация
Среда, 10.06.2026, 19:02Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Обсуждение языковой трансляции
DarkDemonДата: Четверг, 04.06.2026, 19:28 | Сообщение # 1
Генерал-майор
Группа: Друзья
Сообщений: 333
Репутация: -1
Статус: Offline
Кто-нибудь писал языковые парсеры без общей теории на простых строковых функциях? Без выебонов: рекурсии
и сложных структур, просто в лоб.

Мне интересно послушать что скажут люди. Потом выскажусь сам. Пытаюсь оглядеться.


Сообщение отредактировал DarkDemon - Четверг, 04.06.2026, 19:28
 
DarkDemonДата: Понедельник, 08.06.2026, 01:21 | Сообщение # 2
Генерал-майор
Группа: Друзья
Сообщений: 333
Репутация: -1
Статус: Offline
Ладно тема не хайповая, понимаю. Нужна затравка.



212 конструктов, т.е. операторов и ключевых слов старого BASIC, добавленных в следующую структуру



где каждый элемент это:
Код
TYPE SyntTree FIELD = 1
   pnext AS BYTE POINTER   '  Поинтер на массив(память) из 256 букв
   pprev AS BYTE POINTER   '  Поинтер на предыдущий уровень, т.е. на массив(память) из 256 букв
   id AS INTEGER           '  Идентификатор конструкта
END TYPE

Занимают в памяти 3642 Килобайта или 3,55 Мегабайта.

Можно этого не делать и сравнивать строки в упор. Но будет сильно медленнее. Т.е. даже без выебонов,
всё равно требуется как минимум полноценное дерево, т.е. не заводя экономную структуру, а сразу по 256
элементов на каждую ветку. Даже так получается уже нифига не просто. Можно конечно подумать
как сэкономить, но не люблю выпендриваться там, где это по сути мало что даст. Не под DOS-ом же пишем.

Немного пробежался по этой теме. Конструкты называют токенами.

Общая теория не говорит как правильно постадийно в идеале должен проходить процесс, но люди пишут
про:

1) Лексер или токенайзер, т.е. преобразователь символов в токены(или как мне привычнее - конструкты)
2) Парсер, т.е. парсит конструкты и работает с лексемами
3) Стадия создания упрощённого кода (по 2 операции, например a = b + c, след строка d = a * e и т.д.)
4) Оптимизатор (оптимизирует т.н. упрощённый код)
5) Транслятор упрощённого кода в ассемблер
6) Линковка и генерация опкодов и бинарника.

Так вроде всё ровно, но есть недосказанность в первых двух стадиях. Никто не скрывает что там нет
100% точного подхода и по сути данная стадия является недетерминированным алгоритмом.
Прикрепления: 7084887.png (7.3 Kb) · 9182232.png (9.5 Kb)


Сообщение отредактировал DarkDemon - Понедельник, 08.06.2026, 05:08
 
haavДата: Понедельник, 08.06.2026, 05:55 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1475
Репутация: 50
Статус: Offline
Может какие книги про создание компиляторов помогут? По идее там должны быть описаны подобные техники. Однако советовать никаких конкретных названий книг не буду , потому как я не в теме.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
DarkDemonДата: Понедельник, 08.06.2026, 07:56 | Сообщение # 4
Генерал-майор
Группа: Друзья
Сообщений: 333
Репутация: -1
Статус: Offline
Стас, книги то помогут, дело не в этом, на самом деле там самые сложные этапы как раз последние(оптимизация
и генерация ASM кода), но не хочу готовыми решениями себе мозги забивать, они сильно сузят мышление.
Заметил, что когда не знаешь как сделано - можешь сделать по-другому, это влияет на общую архитектуру.
Дело в том, что перед тем как смотреть литературу и видосы по теме, первоначально сел чтобы немного помозговать
дабы сравнить опосля подходы, где использовать своё, а где уже известное.

И по итогу что-то сходится, а что-то наоборот. Например, не разграничиваю лексер и парсер. Большая часть
мне понятна, но там где-то слепое пятно(где-то в районе выражений по бейсиковским принципам, на уровне
проверки корректности в пачке со сравнениями + одновременным разбором лексем). Поэтому, чтобы понять
мол стоит ли туда вообще залезать с головой эта тема и создана.

Может кто чего крутил, напарывался, какие-то вещи народ знает важные. Уже лазил в недетерминиловку, оно
меня побеждает, а тут вроде бы жопочасы и +/- последовательный процесс, но не факт, важно понять насколько
не факт. Это как раз та задача, которую, если у проектного кодера спросить, за сколько он её сделает - то не скажет,
ну если прям откровенно. Тут уже не до передовых подходов и самоуверенности, сказать больше, по куче факторов,
сейчас каждое такое погружение может стать последним, а бывает оно ещё и оказывается не по плечу.

Короче почву прощупать. Если кто туда не лазил - то и не надо, это не агитация.
 
WQДата: Среда, Сегодня, 18:33 | Сообщение # 5
Полковник
Группа: Проверенные
Сообщений: 216
Репутация: 7
Статус: Offline
Цитата DarkDemon ()
Кто-нибудь писал языковые парсеры без общей теории на простых строковых функциях? Без выебонов: рекурсиии сложных структур, просто в лоб.
Я писал лексер на freebasic для подсветки слов
Текст представляется в виде массива, потом посимвольно читается в цикле
 
  • Страница 1 из 1
  • 1
Поиск: