Skip to content

silva-nick/Bluefin

Repository files navigation

Bluefin 🐟

A C-style block-based interpreted computer language

Building with Docker

Run docker container

docker compose up -d --build
docker cp bf:/usr/include/boost/ ./extern/boost
docker exec -ti bf bash

use this:

./utils/config.sh

./utils/build.sh

Probably just use build.sh in ./utils

Then to build.

# Configure the build
CC=gcc CXX=g++ cmake ..
cmake --build build --target bluefin

Testing

ctest -C Release

Debug

cmake -S . -B build/Debug -D CMAKE_BUILD_TYPE=Debug
cmake --build build/Debug --target test

Grammar (EBNF)

program = compound_statement
        | program compound_statement

compound_statement = "{" statement_list "}"

statement_list = statement
               | statement statement_list

statement = compound_statement line_end
          | assignment_expression line_end
          | white_space

expression = assignment_expression

assignment_expression = logical_expression
                      | unary_expression assignment_operator assignment_expression

logical_expression = relational_expression
                   | logical_expression || relational_expression
                   | logical_expression && relational_expression

relational_expression = additive_expression
                      | relational_expression == additive_expression
                      | relational_expression != additive_expression
                      | relational_expression >= additive_expression
                      | relational_expression <= additive_expression
                      | relational_expression > additive_expression
                      | relational_expression < additive_expression

additive_expression = multiplicative_expression 
                    | additive_expression + multiplicative_expression
                    | additive_expression - multiplicative_expression

multiplicative_expression = unary_expression
                          | multiplicative_expression * unary_expression
                          | multiplicative_expression / unary_expression
                          | multiplicative_expression // unary_expression
                          | multiplicative_expression % unary_expression

unary_expression = primary_expression
                 | unary_operator primary_expression

primary_expression = indentifier
                   | constant
                   | "(" expression ")"

identifier = alphabetic character (alphanumeric character)*

declaration = {type_specifier}+ {mode_specifier}+ identifier assignment_operator assignment_expression line_end

type_specifier = int
               | double
               | string

mode_specifier = ?
               | ~

constant = integer      
         | double
         | "string"

assignment_operator = =

unary_operator = +|-

line_end = ";"|"\n"

Credit:

About

A statically-typed reflective programming language

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published