diff options
| Commit | 9517d3d05e86621b6c4ed58edd7f5821632e0872 (patch) | |
|---|---|---|
| Author | 2025-02-14 08:23:08 +0200 | |
| Committer | 2025-02-14 08:24:27 +0200 | |
| Files | 2d633e6452e8167bada5db90d061cbdbd8ffcf89 /assembler/src/parser/semantic.rs | |
| tonkobali-9517d3d05e86621b6c4ed58edd7f5821632e0872.tar tonkobali-9517d3d05e86621b6c4ed58edd7f5821632e0872.tar.gz tonkobali-9517d3d05e86621b6c4ed58edd7f5821632e0872.zip | ||
| Parent | 2cf1097e124c5a0c5836987416b080b6aa4cdd0f (diff) | |
feat(assembler): Implemented semantic analysis
1 files changed, 23 insertions, 0 deletions
| -rw-r--r-- | assembler/src/parser/semantic.rs | 23 |
diff --git a/assembler/src/parser/semantic.rs b/assembler/src/parser/semantic.rs new file mode 100644 index 0000000..47ba201 --- /dev/null +++ b/assembler/src/parser/semantic.rs @@ -0,0 +1,23 @@ +use super::{ Address, Program }; + +impl Program { + pub(crate) fn remove_definition_addresses(&mut self) { + for instr in &mut self.instructions { + for arg in &mut instr.args { + if let Address::Definitions(name) = arg { + *arg = self.definitions[name].clone(); + } + } + } + self.definitions.clear(); + } + + pub(crate) fn analyze(&self) { + for instr in &self.instructions { + let result = instr.check_args(); + if result.is_err() { + panic!("Instruction '{}' error: {:?}", instr.name, result.err().unwrap()); + } + } + } +} |
