Список поддерживаемых операций
Каждая операция в дереве имеет название и идентификатор ее вида, определяющий ее назначение. В общем случае, операция является абстракцией над одной или несколькими инструкциями в исполняемом файле, которые соответствуют ее семантике. Например, арифметической бинарной операции обычно соответствует одна инструкция, вычисляющая результат заданной операции. В то же время, операция, задающая цикл, при построении исполняемого файла должна быть развернута в целый набор вычислений и условных переходов.
Операции, реализованные в настоящей работе, можно разделить на несколько групп:
Фундаментальные операции. Операции в этой группе служат для задания основных “блоков” программы: объявления и вызова функций, введения констант. В группу входят следующие операции:
ModuleOp,FunctionOp,FunctionCallOp,ReturnOp,ConstantOp.Вычислительные операции. Эти операции являются репрезентацией вычисления всевозможных арифметико-логических выражений. В группу входят следующие операции:
ArithBinaryOp,LogicBinaryOp,ArithCastOp,ArithUnaryOp,LogicUnaryOp.Операции по работе с памятью. Указанной группе принадлежат операции, работающие с низкоуровневым представлением памяти для явной аллокации, загрузки и сохранения значений. В группу входят следующие операции:
AllocateOp,LoadOp,StoreOp.Операции над потоком управления. Операции в этой группе используются для декларирования условных и цикловых конструкций, а также их компонентов. В группу входят следующие операции:
IfOp,ThenOp,ElseOp,WhileOp,ConditionOp,ForOp.Специальные операции. Эти операции представляют собой высокоуровневые языковые конструкции, которые должны сохраниться и в низкоуровневом представлении. В группу входят следующие операции:
InputOp,PrintOp.
В соответствии со своим назначением, каждая операция обязана иметь заданное количество операндов, результирующих значений, внутренних регистров, атрибутов. За проверку корректности этих, а также и других параметров, присущих операции, отвечает семантический анализатор.