Hallo,Синтаксический анализ с использованием Flex/Bison 2
Мне нужна помощь в программировании Lex/Yacc. Я написал компилятор для синтаксического анализа для ввода многих операторов. Теперь у меня есть особая проблема.
В случае ввода компилятор дает правильный вывод, какой оператор использует, оператор константы или инструктор jmp, к которому метка, теперь мне нужно написать так, если теперь возникает инструкция if, сначала первая команда (перед else) должен выдаваться, когда присваивание if да, тогда он должен перейти к концу, потому что команда после else не нужна, поэтому после этого jmp вторая команда должна выдавать. Я показываю это в примере, может быть, вы понимаете, что я имею в виду.
Ввод adr. Выход
if(x==0) 10 if(x==0)
Wait 5 20 WAIT 5
else 30 JMP 50
Wait 1 40 WAIT 1
end 50 END
нравится так. У меня есть идея, может быть, я могу это сделать ти специальной, если заявление, как
IF exp jmp_stmt_end stmt_seq END
когда, если оператор задается на входе компилятор распознать конец OFTHE заявления и как мой jmp_stmt в моем компиляторе (вы придется загружать файлы с http://bitbucket.org/matrix/changed-tiny) только для перехода в конец. Надеюсь, вы понимаете мою проблему.
+1. Этот процесс называется «backpatching», и, хотя он ** может быть выполнен за один проход, предлагаемый здесь двухпроходный подход намного проще реализовать и работает так же хорошо. –