MotoGarage_parser 0.1.5

A parser and interpreter for MotoGarage DSL, a language for managing motorcycle collections.
Documentation
# motogarage_parser Documentation


A simple parser and interpreter crate for the MotoGarage DSL.

## Overview


The **motogarage_parser** is a parser that processes a custom Domain-Specific Language (DSL) for managing motorcycle collections. It uses a **Pest** grammar to parse text files.

It extracts definitions (like `DEFINE bike ...`) and queries (like `GET BIKES` or `COUNT BIKES`) and represents them as an Abstract Syntax Tree (AST). An included interpreter (`Garage`) can then execute this AST to manage an in-memory collection and return query results.

## Features


* Parses `DEFINE bike "Name" { ... }` definitions.
* Parses `GET BIKES` and `COUNT BIKES` queries.
* Supports `WHERE` clauses with operators (`=`, `>`, `<`).
* Handles and ignores whitespace and `//` style comments.
* Provides a clean AST representation (e.g., `Command`, `Motorcycle`, `Query`).
* Includes an interpreter (`Garage`) to execute commands and return results.

## Example


```rust
use motogarage_parser::{parse_moto_file, Garage};

let source = r#"
// Define a new bike
DEFINE bike "Honda CBR600RR" {
    year: 2021,
    type: sport
}

// Query for sport bikes
GET BIKES WHERE type = sport
"#;

// 1. Parse the file into an AST
let ast = parse_moto_file(source).unwrap();

// 2. Create an interpreter and execute the AST
let mut garage = Garage::new();
let results = garage.execute(ast).unwrap();

// results will be: vec!["Honda CBR600RR"]

## Public API Summary


### `parse_moto_file(input: &str)`


Parses a `.moto` source string and returns a `Result<Vec<Command>, MotoError>`, which is the program's Abstract Syntax Tree (AST).

### `Garage`


Represents the interpreter, which holds the state (the collection of bikes).

* `new() -> Self`: Creates a new, empty `Garage`.
* `execute(&mut self, program: Vec<Command>) -> Result<Vec<String>, MotoError>`: Executes the AST and returns a `Vec<String>` containing the results from `GET` or `COUNT` queries.

### `Command` (AST Node)


Represents a single top-level command in the AST.

* `Definition(Motorcycle)`
* `Get(Query)`
* `Count(Query)`

### `MotoError` (Error Type)


The enum representing all possible parsing or interpretation errors.

* `ParseError(pest::error::Error<Rule>)`
* `InterpreterError(String)`

## CLI Usage


The crate also includes a binary CLI application:

# Parse and execute a file

moto parse my_garage1.moto

# Show credits

moto credits