Uma linguagem dispõe de uma instrução que corresponde a um ciclo que faz variar uma variável de controlo entre dois limites, utilizando um incremento variável. Na instrução abaixo, partes em negrito correspondem a palavras chave da linguagem e partes em itálico correspondem a partes variáveis.
sweep variable from expression to expression step expression do instruction
variable corresponde a uma variável inteira ou real, expression corresponde a uma expressão com tipo compatível com a variável e instruction corresponde a uma instrução que faz uso da variável.
Escreva a classe que representa o nó correspondente a esta instrução, indicando todos os seus atributos. Defina ainda a função de visita (accept). Além do nó pedido, não é necessário definir outros, devem ser usados os que são fornecidos com a CDK.
Um exemplo de uso é indicado a seguir. Supõe-se que i é uma variável real, que f() é uma chamada a uma função que devolve um valor real e que print(i) é uma chamada a uma função que aceita um valor real.
sweep i from f()/3 to f()/2 step 0.1 do print(i)
AST node: sweep_node |
---|
class sweep_node : public cdk::basic_node {
cdk::lvalue_node *_variable;
cdk::expression_node *_from;
cdk::expression_node *_to;
cdk::expression_node *_step;
cdk::basic_node *_instruction;
public:
sweep_node(int lineno, cdk::lvalue_node *variable, cdk::expression_node *from, cdk::expression_node *to, cdk::expression_node *step, cdk::basic_node *instruction) :
basic_node(lineno), _variable(variable), _from(from), _to(to), _step(step), _instruction(instruction) {
// EMPTY
}
void accept(basic_ast_visitor *sp, int level) {
sp->do_sweep_node(this, level);
}
// other functions
};
|
Uma linguagem dispõe de uma instrução que corresponde a um ciclo que faz variar uma variável de controlo entre dois limites, utilizando um incremento variável. Na instrução abaixo, partes em negrito correspondem a palavras chave da linguagem e partes em itálico correspondem a partes variáveis.
with variable run instruction between expression and expression stepping expression
variable corresponde a uma variável inteira ou real, expression corresponde a uma expressão com tipo compatível com a variável e instruction corresponde a uma instrução que faz uso da variável.
Escreva a classe que representa o nó correspondente a esta instrução, indicando todos os seus atributos. Defina ainda a função de visita (accept). Além do nó pedido, não é necessário definir outros, devem ser usados os que são fornecidos com a CDK.
Um exemplo de uso é indicado a seguir. Supõe-se que i é uma variável real, que f() é uma chamada a uma função que devolve um valor real e que print(i) é uma chamada a uma função que aceita um valor real.
with i run print(i) between f()/3 and f()/2 stepping 0.1
AST node: with_node |
---|
class with_node : public cdk::basic_node {
cdk::lvalue_node *_variable;
cdk::basic_node *_instruction;
cdk::expression_node *_between;
cdk::expression_node *_and_expression;
cdk::expression_node *_step;
public:
sweep_node(int lineno, cdk::lvalue_node *variable, cdk::basic_node *instruction, cdk::expression_node *between, cdk::expression_node *and_expression, cdk::expression_node *step) :
basic_node(lineno), _variable(variable), _instruction(instruction), _between(between), _and_expression(and_expression), _step(step) {
// EMPTY
}
void accept(basic_ast_visitor *sp, int level) {
sp->do_with_node(this, level);
}
// other functions
};
|