Я пытаюсь реализовать прототип синтаксического анализатора ассемблера, используя lex / flex и yacc / bison. Я хочу создать таблицу символов, которая является C ++ STL vector
из struct
, Тем не менее, я новичок в lex и просто знаю, что, так как lex генерирует код на C, я думаю, что таблицу символов нельзя использовать непосредственно в файле lex, так как в C нет STL.
Есть ли способ, который может помочь мне манипулировать таблицей символов вектора из lex и получать к ней доступ из кода yacc?
Спасибо..
Я столкнулся с подобной проблемой при создании собственного компилятора. Есть несколько подходов:
Создайте отдельный файл c ++, реализуйте функцию в c ++ и экспортируйте ее в C:
extern «C» {
void f () {
// C ++ код здесь
}
}
теперь вы можете вызвать его из кода, сгенерированного lex / yacc.
Генерация кода C ++ в flex / bison, затем вы можете напрямую писать код C ++ в грамматике.
Вы все еще можете включать код C ++ в грамматику, но это не очень хорошая идея по многим причинам.
flex и bison имеют C ++ — дружественные эквиваленты, flex ++ и bison ++. Страницы руководства для тех, кто может быть полезным для вас.
flex ++ — это просто flex, который выводит код C ++. bison ++ — это отдельный проект, основанный на bison, который генерирует код C ++.