Project

General

Profile

Task #4656

Updated by Alexander Kamkin almost 11 years ago

Цель - возможность выделения общей функциональность в операции. 

 Предположим, требуется выделить проверку условий возникновения исключений в отдельную операцию и вызывать ее из action-блоков инструкций. 

 <pre> 
 op ExceptionChecker(flags: Flags) // возможны параметры 
     action = { ... }                // синтаксис не нужен 
 </pre> 

 Сейчас для вызова одной операции из другой у родительской операции нужно заводить параметр. Соответственно, параметр нужно указывать в тестовом шаблоне (что уже кривовато); есть шанс, что он будет указан некорректно (это никуда не годится). 

 Другой вариант - создать инстанс требуемой операции и осуществить вызов. 

 Думаю, правильнее всего инстансы описывать в форме атрибутов (грамматика меняется локально + запрет на динамическое порождение инстансов). 

 <pre> 
 op ADD(src1: REG, src2: REG, dst: REG) 
     syntax    = format("slozhenie %s %s %s", src1.syntax, src2.syntax, dst.syntax) 
     checker = ExceptionChecker(0xDEAD) // при создании инстанса операции ADD будет автоматически порождаться инстанс дочерней операции 
     action    = 
     { 
         ExceptionChecker(0xDEAD).action; 
         checker.action; 
         ... 
     } 
 </pre> 

 Режимы с возвращаемым значением можно использовать в выражениях: 

 <pre> 
 mode TypeOf(x: IMMEDIATE) = x<13..12> 
 </pre> 

 <pre> 
 if(TypeOf(x) == X) 
     ... 
 endif 
 </pre> P.S. Все сказанное справедливо и для режимов.

Back