использование STL в коде lex / flex

Я пытаюсь реализовать прототип синтаксического анализатора ассемблера, используя lex / flex и yacc / bison. Я хочу создать таблицу символов, которая является C ++ STL vector из struct, Тем не менее, я новичок в lex и просто знаю, что, так как lex генерирует код на C, я думаю, что таблицу символов нельзя использовать непосредственно в файле lex, так как в C нет STL.

Есть ли способ, который может помочь мне манипулировать таблицей символов вектора из lex и получать к ней доступ из кода yacc?

Спасибо..

0

Решение

Я столкнулся с подобной проблемой при создании собственного компилятора. Есть несколько подходов:

  • Создайте отдельный файл c ++, реализуйте функцию в c ++ и экспортируйте ее в C:

    extern «C» {
    void f () {
    // C ++ код здесь
    }
    }

теперь вы можете вызвать его из кода, сгенерированного lex / yacc.

  • Генерация кода C ++ в flex / bison, затем вы можете напрямую писать код C ++ в грамматике.

  • Вы все еще можете включать код C ++ в грамматику, но это не очень хорошая идея по многим причинам.

1

Другие решения

flex и bison имеют C ++ — дружественные эквиваленты, flex ++ и bison ++. Страницы руководства для тех, кто может быть полезным для вас.

flex ++ — это просто flex, который выводит код C ++. bison ++ — это отдельный проект, основанный на bison, который генерирует код C ++.

0

По вопросам рекламы [email protected]