Придумал такую задачу - написать простенькую систему учета оргтехники, чисто для того, чтобы понять, как строить DSL.
Далее будет поток сознания, знающих людей попрошу поправлять по ходу.
Язык имеет следующий вид:
device videocard labeled "Videocard" {
required hex vendor labeled "Vendor"
required hex device labeled "Device"
optional date released labeled "Release Date"
required string inventory-id labeled "Inventory #"
required set status labeled "Status" value: ordered, in-store, in-repair, stopped-using, wrote-off
}
На основе него должны генерироваться таблицы для sql и формы для gui.
Нужно представить код dsl в пригодном для обработки виде:
(device videocard "Videocard"
((vendor required hex "Vendor")
(device required hex "Device")
(released optional date "Release Date")
(inventory-id required string "Inventory #")
(status required set "Status" (ordered, in-store, in-repair, stopped-using, wrote-off))))
И вот уже на основе этого строятся макросы, функции и классы - здесь вроде все понятно. У меня затык возник на стадии парсинга из исходного представления в s-выражения. Я просто не могу выразить алгоритм на лиспе, ибо только учусь.