Oberon space
General Category => Общий раздел => Тема начата: Madzi от Сентябрь 03, 2013, 08:54:21 pm
-
Рассмотрим представление программы в виде некоторой структуры.
-
Продолжение (глюкнул браузер и ушло неполное письмо)...
При парсинге программы (для последующей кодогенерации) нужно хранить распаренную структуру (AST). Хорошо бы договориться по поводу формата представления, чтобы можно было легко взаимозаменять генераторы/парсеры.
В данный момент я это вижу так:
{
objId: 'module',
name: 'noname',
description: 'some comment for module',
imports: [],
consts: [],
types: [],
vars: [],
procs: [],
code: []
},
{
objId: 'procedure',
name: 'someProc',
description: 'some comment for procedure',
params: [],
result: {},
consts: [],
vars: [],
procs: [],
code: []
}
-
Речь, ведь, об oberonjs, да?
-
Рассмотрим представление программы в виде некоторой структуры.
Мне кажется, что тот, кто сделает парсер/генератор постит сюда получившийся формат де-факто. Его можно пообсуждать и очевидные ляпы фикснуть. Так будет более предметно.
-
При парсинге программы (для последующей кодогенерации) нужно хранить распаренную структуру (AST).
А какое именно AST имеется в виду? Синтаксическое дерево (с возможными ошибками типизации, видимости и тд) или же семантическое?
-
А какое именно AST имеется в виду? Синтаксическое дерево (с возможными ошибками типизации, видимости и тд) или же семантическое?
Синтаксическое для оберона - это слишком просто :) Больший смысл имеет что-то готовое для непосредственной генерации кода.
-
У меня немного другая мысль (эту мысль я высиживаю давно и применительно не только к Оберону), мысль что в стандартной либе должена быть возможность доступка к синтаксическому и семантическому анализатору языка. То есть чтобы на том же Обероне можно было строить языковые тулзы которые понимают язык в точности также как компилятор. Частным случаем таковой тулзы (то есть это можно будет написать на Обероне же) - генерация файла внешнего представления синтаксического дерева и семантики полученной штуки.
По сути это набор биндингов к компилятору. Но для этого в компилятор нужно будет внести ряд изменений. И это не прямо сейчас.