(→CDK Nodes) |
(→CDK Nodes) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 9: | Line 9: | ||
== CDK Nodes == | == CDK Nodes == | ||
+ | |||
+ | {{CollapsedCode|CDK node hierarchy| | ||
+ | <source lang="text"> | ||
+ | basic_node | ||
+ | ├── data_node | ||
+ | ├── nil_node | ||
+ | ├── sequence_node | ||
+ | └── typed_node | ||
+ | ├── expression_node | ||
+ | │ ├── assignment_node | ||
+ | │ ├── binary_operation_node | ||
+ | │ │ ├── add_node | ||
+ | │ │ ├── and_node | ||
+ | │ │ ├── div_node | ||
+ | │ │ ├── eq_node | ||
+ | │ │ ├── ge_node | ||
+ | │ │ ├── gt_node | ||
+ | │ │ ├── le_node | ||
+ | │ │ ├── lt_node | ||
+ | │ │ ├── mod_node | ||
+ | │ │ ├── mul_node | ||
+ | │ │ ├── ne_node | ||
+ | │ │ ├── or_node | ||
+ | │ │ └── sub_node | ||
+ | │ ├── literal_node | ||
+ | │ │ ├── double_node | ||
+ | │ │ ├── integer_node | ||
+ | │ │ └── string_node | ||
+ | │ ├── rvalue_node | ||
+ | │ └── unary_operation_node | ||
+ | │ ├── unary_minus_node | ||
+ | │ ├── unary_plus_node | ||
+ | │ └── not_node | ||
+ | └── lvalue_node | ||
+ | └── variable_node | ||
+ | </source> | ||
+ | }} | ||
* '''basic_node''' -- base class for all nodes: provides information about the program location (code line) | * '''basic_node''' -- base class for all nodes: provides information about the program location (code line) | ||
* '''sequence_node''' -- node for representing sequences of other nodes | * '''sequence_node''' -- node for representing sequences of other nodes | ||
− | * '''typed_node''' -- node for typed entities (any entity that has a type): main subclasses | + | * '''typed_node''' -- node for typed entities (any entity that has a type): the main subclasses are '''expression_node''', '''lvalue_node''', and (in specific compilers) function/variable declaration (and definition) nodes |
=== Expressions === | === Expressions === | ||
Line 23: | Line 60: | ||
** '''eq_node''' '''ne_node''' -- equality operations | ** '''eq_node''' '''ne_node''' -- equality operations | ||
* '''unary_operation_node''' (a subclass of '''expression_node''') -- abstract node for describing unary operations | * '''unary_operation_node''' (a subclass of '''expression_node''') -- abstract node for describing unary operations | ||
− | ** '''not_node''' ''' | + | ** '''not_node''' '''unary_minus_node''' '''unary_plus_node''' -- miscellaneous unary operations |
=== Left-Values === | === Left-Values === | ||
Line 43: | Line 80: | ||
== Nodes in the "Simple" Language == | == Nodes in the "Simple" Language == | ||
+ | |||
+ | {{CollapsedCode|"Simple" node hierarchy| | ||
+ | <source lang="text"> | ||
+ | cdk::basic_node | ||
+ | ├── evaluation_node | ||
+ | ├── if_else_node | ||
+ | ├── if_node | ||
+ | ├── print_node | ||
+ | ├── program_node | ||
+ | ├── read_node | ||
+ | └── while_node | ||
+ | </source> | ||
+ | }} | ||
* '''evaluation_node''' -- node for representing expressions used as instructions | * '''evaluation_node''' -- node for representing expressions used as instructions |
AVISOS - Avaliação em Época Normal |
---|
Esclarecimento de dúvidas:
|
Requisitos para desenvolvimento, material de apoio e actualizações do enunciado (ver informação completa em Projecto de Compiladores):
|
Processo de avaliação (ver informação completa em Avaliação do Projecto):
|
Material de Uso Obrigatório |
---|
As bibliotecas CDK e RTS de apoio ao desenvolvimento do projecto são de uso obrigatório: |
|
A máquina virtual, fornecida para desenvolvimento do projecto, já contém todo o material de apoio. |
Uso Obrigatório: Repositório GIT |
Apenas se consideram para avaliação os projectos existentes no repositório GIT oficial. Apenas se considera para avaliação o ramo main.
Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho. |
CDK is the basis for compiler development in this setup. Simple is a small compiler based on the CDK.
This page focuses on the nodes, that is, the structures defined to represent the various language elements present in each package. CDK nodes tend to be general, in the sense that the concepts are reusable accross different languages. Simple provides nodes specific to the implemented language.
CDK node hierarchy |
---|
basic_node
├── data_node
├── nil_node
├── sequence_node
└── typed_node
├── expression_node
│ ├── assignment_node
│ ├── binary_operation_node
│ │ ├── add_node
│ │ ├── and_node
│ │ ├── div_node
│ │ ├── eq_node
│ │ ├── ge_node
│ │ ├── gt_node
│ │ ├── le_node
│ │ ├── lt_node
│ │ ├── mod_node
│ │ ├── mul_node
│ │ ├── ne_node
│ │ ├── or_node
│ │ └── sub_node
│ ├── literal_node
│ │ ├── double_node
│ │ ├── integer_node
│ │ └── string_node
│ ├── rvalue_node
│ └── unary_operation_node
│ ├── unary_minus_node
│ ├── unary_plus_node
│ └── not_node
└── lvalue_node
└── variable_node
|
"Simple" node hierarchy |
---|
cdk::basic_node
├── evaluation_node
├── if_else_node
├── if_node
├── print_node
├── program_node
├── read_node
└── while_node
|