/ / Як реалізувати розгалуження в інтерпретаторі на основі зубрів? - віртуальна машина, бізон, інтерпретатор, flex-lexer

Як реалізувати розгалуження в перекладачах на базі бізона? - віртуальна машина, бізон, інтерпретатор, flex-lexer

Зараз розробляю віртуальну машину. Інтерпретатор Bytecode використовує flex і bison. Ось деякий код, наприклад:

some:
add r0 4 4
jmp some

Моє питання: як працювати з інструкцією jmp? Чи можу я попросити зубра повернутися до етикетки, продовжуючи аналіз?

Я розробляю інтерпретатор байт-коду, а не компілятор ...

Відповіді:

0 для відповіді № 1

Ні, ви не можете "зробити зубр повернутися. Ви зазвичай Bison розібрати код і генерувати якесь проміжне представлення.

Так у вашому випадку, так як ви повторно аналізуєте збіркумовою для формату байт-коду, має сенс перевести це у фактичний байт-код. Тобто, коли ваш парсер бачить "add r0 4 4", все, що потрібно зробити, це додати відповідну послідовність байтів до масиву, що містить ваш байт-код. Потім після того, як парсер створить цей масив, ви можете передати його функції, яка фактично виконує байт-код.

Ймовірно, це має сенс розбити їхдва кроки в дві окремі програми: асемблер, який перетворює вихідний файл у файл бінарного байта, і інтерпретатор байт-коду, який читає файл байт-коду і виконує його. Останній взагалі не потрібно використовувати Bison, просто читати байти і switch на них.