Неподскажите ли LR (1) parser generator под linux в котором можно без гемороя назначать с++ классы к качестве semantic_type к символам грамматики. Провобвал bison, но в нем %union позволяет хранить только указатели, и поэтому получается много гемороя с memory management.
Здравствуйте, ival, Вы писали:
I>Провобвал bison, но в нем %union позволяет хранить только указатели, и поэтому получается много гемороя с memory management.
Можно в контексте иметь что то вроде репозитория составляющих AST. Т.е. складывать их в какие нибудь общие списки по типам, а между собой просто указателями ликовать. Тогда нет необходимости уничтожения в иерархически порядке, все автоматически освободится при очистке репозитория.
Здравствуйте, ival, Вы писали:
I>но в нем %union позволяет хранить только указатели, и поэтому получается много гемороя с memory management.
Я в свое время применял что-то вроде "ручного GC" для этого.
То есть, в %union просто тупо пинал указатели, и заодно сохранял их "сбоку" в векторе для последующего удаления.
В итоге, когда AST переставало быть нужным, я про него его просто "забывал", но зато чистил тот вектор, где все и сидело.
Утечек не было.
__________
16.There is no cause so right that one cannot find a fool following it.
Здравствуйте, ival, Вы писали:
I>Неподскажите ли LR (1) parser generator под linux в котором можно без гемороя назначать с++ классы к качестве semantic_type к символам грамматики. Провобвал bison, но в нем %union позволяет хранить только указатели, и поэтому получается много гемороя с memory management.
I>Есть ли что-нибудь по-проще?
Bison. В конструктор парсера через передаешь указатель на объект-посредник, потом через этот посредник делаешь все что тебе нужно:
Здравствуйте, 0xDEADBEEF, Вы писали:
DEA>Здравствуйте, ival, Вы писали:
I>>но в нем %union позволяет хранить только указатели, и поэтому получается много гемороя с memory management. DEA>Я в свое время применял что-то вроде "ручного GC" для этого. DEA>То есть, в %union просто тупо пинал указатели, и заодно сохранял их "сбоку" в векторе для последующего удаления. DEA>В итоге, когда AST переставало быть нужным, я про него его просто "забывал", но зато чистил тот вектор, где все и сидело. DEA>Утечек не было.