Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pacatro/sicompiler
A basic compiler for SiCoMe programs
https://github.com/pacatro/sicompiler
clap rust
Last synced: 1 day ago
JSON representation
A basic compiler for SiCoMe programs
- Host: GitHub
- URL: https://github.com/pacatro/sicompiler
- Owner: Pacatro
- Created: 2024-01-04T16:25:53.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-29T15:40:00.000Z (8 months ago)
- Last Synced: 2025-02-03T10:42:07.901Z (5 days ago)
- Topics: clap, rust
- Language: Rust
- Homepage:
- Size: 67.4 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SiCompiler
This is a simple project that check for syntax errors in your SiCoMe program.
You can see this project also in [Crates.io](https://crates.io/crates/sicompiler)
## 🛠️ Instalation
### Using cargo
You must have [Rust](https://www.rust-lang.org/es/tools/install) installed:
```terminal
cargo install sicompiler
```## ✏️ How to use
To use sicompiler you need to have a `.txt` file where you write your program and a `.rep` file with the valid instructions.
### Execution
```terminal
sicompiler --rep
```### Arguments
```terminal
The input path to compile
The repertoire of instructions
[OUTPUT_PATH] The output path to write to [default: out.txt]
```### Options
```terminal
-o, --out The output path to write to [default: out.txt]
-r, --rep The repertoire of instructions
-h, --help Print help
-V, --version Print version
```The result will be an output file with the path you write or a default path in the same directory you are.
### Input
```termial
0 0003 #Number 1
1 0003 #Number 2
3 0000 #Result*** This is a
multi-line comment ***@
6
@CRA
CRF
ADD 0001
ROR_F_ACC
SFZ
JMP 12 #F!=0#-----F==0-----
CRA
CRF
ADD 0000
ROL_F_ACC
STA 0004
HALT#-----F!=0-----
CRA
CRF
ADD 0001
ROL_F_ACC
STA 0004
HALT
```### Output
```terminal
0 0003
1 0003
3 0000
@
6
@
CRA
CRF
ADD 0001
ROR_F_ACC
SFZ
JMP 12
CRA
CRF
ADD 0000
ROL_F_ACC
STA 0004
HALT
CRA
CRF
ADD 0001
ROL_F_ACC
STA 0004
HALT
```## 📚 Standars
> [!IMPORTANT]
> These standards are subject to updates.This compiler meets some standars that have been written resently.
### One-line comments
The comments in one line will be specified by a `#`:
```terminal
CRA 23 #One line comment
```### Multi-line comments
The comments in one line will be specified by `***` at the beginig and another at the end:
```terminal
CRA 23
***Multi
line
comment***
```### Program structure
A program is divided into three clearly differentiated sections, each of them separated by the `@` character.
```terminal
@
@
```
### Repertoire structure
A `repertoire` of instructions is the set of instructions that can be in the SiCoMe program.
The structure of a repertoire is like this:
```terminal
$
(Not implemented)
$```
### Error cases
- The program does not follow the structure defined by the standard.
- The instructions in the program are not defined in the repertoire.
- The instructions does not have the correct number of parameters.
- The parameters of the instructions are not in hex base.## 📑 Libraries used
- [Clap](https://crates.io/crates/clap)
## 💻 Development
If you want to colaborate and add new features to the project you must do this simples steps.
### Colaborate
```bash
git clone [email protected]:Pacatro/sicompiler.git
cd sicompiler
cargo build
```### Tests
There are unit tests for the principals structs `Tokenizer` and `Validator` and only two integration tests.
To execute tests you only need to run the following command:
```bash
cargo test
```## 🔑 License
[MIT](https://opensource.org/license/mit/) - Created by **P4k0**.