type VAR = identifier
type code = instruction list
type environment = identifier list
type EXPR = environment -> code * environment
fun ADD_OP expr expr' env = DUMMY
fun SUB_OP expr expr' env = DUMMY
fun MUL_OP expr expr' env = DUMMY
fun DIV_OP expr expr' env = DUMMY
fun MOD_OP expr expr' env = DUMMY
fun NUM n env = ([I_Int n],env)
Здесь я хочу написать функцию продолжения. Этот код является частью более крупного кода, который предназначен для выполнения машинных инструкций. Функция этого кода заключается в преобразовании абстрактного синтаксического кода в машинный код. Ниже приведен набор инструкций машинного кода, который принимает два операнда из стека выполнить операцию и выталкивает результат на стекПочему нижняя функция продолжения в SML не работает?
I_Add
I_Mod
I_Sub
I_Div
в то время как
I_Int
Помещает целочисленное значение в стек. Код будет вызывать прерывание при попытке выполнить команду, если он не найдет требуемый операнд в стеке. предположим, что вы выполняете I_Add, тогда в стеке должно быть два операнда, иначе он будет вызывать прерывание.
до знать мне удалось только написать правильный код для работы I_Int
fun NUM n env = ([I_Int n],env)
Этот код выталкивает число п на стек. Я знаю, что стратегия здесь является первым выполнить «выраж» и «выражение '», а затем добавить команду к списку Я попытался написать код для этого в поле ниже образом
fun ADD_OP expr expr' env = expr env
(fn ((c,_),env) => expr' env
(fn ((c',_),env) => ((c::c'::[I_Add]),env)))
Но это приводит к ошибка несоответствия типа
Error: value type in structure doesn't match signature spec
name: ADD_OP
spec: ?.EXPR -> ?.EXPR -> ?.EXPR
actual: ('a -> ('b * 'c -> Machine.Code.instruction list * 'c) -> 'd)
-> 'e -> 'a -> 'd
Пожалуйста, может кто-нибудь указать мне в правильном направлении, как решить эту ошибку. Я знаю, что мой подход прав, но я не понимаю продолжения. Я пробую это более двух дней, но не могу это решить. Пожалуйста, если кто-то знает какой-либо учебник о том, как писать комментарии в SML, которые также будут полезны.
Вы можете включить определение 'instruction', а? –