https://github.com/csvancea/prefix-ast
Arithmetic expression evaluator written in x86 assembly.
https://github.com/csvancea/prefix-ast
Last synced: 2 months ago
JSON representation
Arithmetic expression evaluator written in x86 assembly.
- Host: GitHub
- URL: https://github.com/csvancea/prefix-ast
- Owner: csvancea
- Created: 2021-02-26T15:51:41.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-02-26T16:13:44.000Z (over 5 years ago)
- Last Synced: 2025-12-27T21:53:07.884Z (6 months ago)
- Language: Assembly
- Homepage:
- Size: 1.95 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Tema 1 - Prefix AST
### Idee de rezolvare:
- Ideea principala pe care se bazeaza rezolvarea este parcurgerea recursiva
postordine a arborelui returnat de `getAST()`, astfel ca pentru fiecare nod
voi parcurge subarborii stang si drept (cat timp acestia exista), iar la
intoarcerea din apelurile recursive voi aplica operatia specificata de nodul
curent pe cele doua rezultate corespunzatoare celor doi subarbori.
- O implementare in pseudocod ar fi urmatoarea:
```cpp
int FUNC_PostOrder(Node *root) {
if (isLeaf(root))
return root->data;
op = root->data;
l = FUNC_PostOrder(root->left);
r = FUNC_PostOrder(root->right);
return FUNC_CalculateOperation(op, l, r);
}
```
### Helpers:
- In rezolvarea temei am definit structura `Node` pentru a lucra mai intuitiv
cu offset-urile datelor cuprinse intr-un nod.
- Pentru a nu aglomera codul, am definit urmatoarele proceduri ajutatoare:
- `FUNC_CalculateOperation(char op, int operand_1, int operand_2)`
- procedura aplica operatia specificata de `op` celor doi operanzi
- operatiile valide sunt: + - * /
- rezultatul operatiilor trebuie sa poata fi stocat pe 32 biti (inmultire)
- `FUNC_StringToInt(const char *string)`
- procedura are ca rol transformarea unui intreg dat ca sir de caractere
in integer
- nu se fac verificari de corectitudine a sirului de intrare
- un sir poate contine doar cifre si poate sa inceapa cu caracterul '-'
- orice alt input duce la undefined behaviour