Как добавить препроцессор в ассемблер flex+bison?
Я написал простой ассемблер, используя flex+bison. Я хотел бы добавить препроцессор (макросы) к языку ассемблера. Я впервые пытаюсь использовать flex+bison, я не знаю, как это сделать.
Целесообразно ли добавить отдельный экземпляр flex + bison и выполнить предварительную обработку полностью отдельно? Или они поддерживают выражение различных конструкций для разных этапов обработки?
Если любопытно, ассемблер здесь, для архитектуры DCPU-16.
2 ответа
Вы определенно хотите отдельный парсер. Вот как это делает gcc - вы можете остановить компиляцию только после предварительной обработки (-E
, Я верю). Технически возможно написать как один синтаксический анализатор, но это будет намного больше проблем, и я не вижу особой причины, почему это было бы полезно, в то время как раздельное хранение позволит вам остановить компиляцию после простой предварительной обработки облегчая поиск ошибок не только в самом препроцессоре / ассемблере, но и в любых программах, написанных с ним.
Вы можете посмотреть на меня. У меня возникла та же идея, что и у вас:P Вы можете найти ее здесь. Она поддерживает выражения, но я поняла, что у вас должен быть аст, если вы хотите поддерживать прямые ссылки. Может быть, когда Нотч узнает, что нефиксированные операционные коды труднее сделать ассемблером, потому что он это изменит:)
Приличная книга на эту тему - " Flex and Bison". Она показывает, как вы можете делать "состояния", то есть вы можете выдвигать состояние лексера и изменять файловые буферы. Это показывает элементарный синтаксический анализатор / лекс только для этого. Это очень помогло в моем обучении:)