Skip to content
/ Borno Public

Borno is a dynamically typed Bangla-based programming language that allows developers to write code using Bangla keywords and identifiers

Notifications You must be signed in to change notification settings

ah-naf/Borno

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Borno Programming Language

Borno is a dynamically typed Bangla-based programming language that allows developers to write code using Bangla keywords and identifiers. Its goal is to provide a familiar programming experience to native Bangla speakers, while still supporting typical programming constructs like variables, functions, arrays, objects, loops, and more.


Table of Contents


Features

  • Bangla Keywords: Write if-statements, loops, and function declarations in Bangla.
  • Arrays & Objects: Use [ ] and { } for arrays and objects, respectively.
  • Functions: Define custom functions with parameters, closures, and return statements.
  • Built-In Functions: Access native functions like input, array manipulation (append, remove), math utilities (sqrt, abs, sin, etc.).
  • Bangla Digits: Parse and convert Bangla digits (০, ১, ২, ৩, ...) to ASCII under the hood.

Installation

  1. Clone the Repository:

    git clone https://github.com/ah-naf/borno.git
    cd borno
  2. Build (assuming you have Go installed):

    go build -o borno

    This produces an executable named borno.


How Borno Works

Borno follows a three-phase process:

  1. Lexical Analysis (Lexer)
    The source code (in .bn files) is scanned character-by-character to produce tokens. For instance, ধরি, ফাংশন, যদি, etc., are recognized as Bangla keywords, while identifiers and operators are tokenized accordingly.

  2. Parsing (Parser)
    The tokens are read according to Borno’s grammar rules, building an Abstract Syntax Tree (AST). This phase checks syntax (e.g., matching parentheses, valid expressions).

  3. Interpretation
    The AST is walked by an interpreter, which executes each statement and expression. There are native functions (e.g., ইনপুট, লেন, এড) that integrate Go-based capabilities (like reading from stdin or calculating math functions).

When you run a Borno script, these steps occur behind the scenes. Any errors (syntax or runtime) are displayed in Bangla or Banglish messages.


Usage

Once you’ve built the borno executable:

  1. Run a Borno Script:

    ./borno my_script.bn
  2. Interactive Mode (REPL): If you run ./borno with no file arguments, you can type code line by line. This is useful for quick tests or demos.

  3. Examples: Check out the examples/ directory (or see below) for .bn files demonstrating language features.

File Extension: We recommend using .bn (short for “Borno”) for all source files.


Core Grammar

Below is a simplified version of Borno’s grammar:

program        → declaration* EOF ;

declaration    → funDecl
               | varDecl
               | statement ;

funDecl        → "ফাংশন" function ;
function       → IDENTIFIER "(" parameters? ")" block ;
parameters     → IDENTIFIER ( "," IDENTIFIER )* ;

varDecl        → "ধরি" variable ( "," variable )* ";" ;
variable       → IDENTIFIER ( "=" expression)? ;

statement      → exprStmt
               | ifStmt
               | whileStmt
               | forStmt
               | printStmt
               | block
               | breakStmt
               | continueStmt
               | returnStmt ;

ifStmt         → "যদি" "(" expression ")" statement ( "নাহয়" statement )? ;
whileStmt      → "যতক্ষণ" "(" expression ")" statement ;
forStmt        → "ফর" "(" ( varDecl | exprStmt | ";" ) expression? ";" expression? ")" statement ;
exprStmt       → expression ";" ;
printStmt      → "দেখাও" expression ";" ;
block          → "{" declaration* "}" ;
breakStmt      → "থামো" ";" ;
continueStmt   → "চালিয়ে_যাও" ";" ;
returnStmt     → "ফেরত" expression? ";" ;

expression     → assignment ;
assignment     → IDENTIFIER "=" assignment | logic_or ;

logic_or       → logic_and ( ( "বা" | "||" ) logic_and )* ;
logic_and      → equality ( ( "এবং" | "&&" ) equality )* ;
equality       → comparison ( ( "!=" | "==" ) comparison )* ;
comparison     → term ( ( ">" | ">=" | "<" | "<=" ) term )* ;
term           → factor ( ( "-" | "+" ) factor )* ;
factor         → power ( ( "/" | "*" | "%" ) power )* ;
power          → unary ( ( "**" ) unary )* ;
unary          → ( "!" | "-" | "~" ) unary | primary ;
primary        → NUMBER | STRING | "সত্য" | "মিথ্যা" | "nil" | "(" expression ")" | IDENTIFIER
               | arrayLiteral | objectLiteral ;

arrayLiteral   → "[" ( expression ( "," expression )* )? "]" ;
objectLiteral  → "{" ( property ( "," property )* )? "}" ;
property       → IDENTIFIER ":" expression ;

Keywords & Reserved Words

Here are the Bangla keywords Borno uses:

Keyword Description
ফাংশন Declares a function.
ধরি Declares a variable.
ফর For-loop.
যদি If-statement.
নাহয় Else-statement.
যতক্ষণ While-loop.
সত্য Boolean true.
মিথ্যা Boolean false.
দেখাও Print statement.
ফেরত Return from function.
থামো Break from loop.
চালিয়ে_যাও Continue loop.
এবং Logical AND (&&).
বা Logical OR (||).

Reserved identifiers like ক্লক, ইনপুট, এড, রিমুভ, etc., are bound to native functions in the global environment.


Examples

Below are a few snippet examples to illustrate various features of Borno.

Native Library Demo

Save this code as native_library_demo.bn and run borno native_library_demo.bn:

// 1) ক্লক (clock) 
//    Shows the current timestamp in seconds.
দেখাও "বর্তমান সময় (সেকেন্ডে): " + ক্লক();

// 2) ইনপুট (input) 
//    Uncomment these lines to test user input interactively.
// দেখাও "কিছু লিখুনঃ"
ধরি প্রবেশ = ইনপুট("আপনার লেখা: ");
দেখাও "আপনি লিখেছেনঃ " + প্রবেশ;

// 3) লেন (len)
//    Returns the length of an array.
ধরি তালিকা = [১০, ২০, ৩০];
দেখাও লেন(তালিকা);

// 4) এড (append)
//    Appends one or more elements to the array.
তালিকা = এড(তালিকা, ৪০);
দেখাও তালিকা;

// 5) রিমুভ (remove)
//    Removes an element from the array at a given index.
তালিকা = রিমুভ(তালিকা, ১);
দেখাও তালিকা;

// 6) কি_রিমুভ (delete)
//    Deletes a property from an object by key.
ধরি বস্তু = {
    নাম: "বর্ণলিপি",
    ধরন: "ডেমো",
    মান: ৫
};
দেখাও বস্তু;
কি_রিমুভ(বস্তু, "মান");
দেখাও বস্তু;

// 7) অব্জেক্ট_কি (keys) এবং অব্জেক্ট_মান (values)
//    Gets arrays of keys or values from an object.
দেখাও অব্জেক্ট_কি(বস্তু);
দেখাও অব্জেক্ট_মান(বস্তু);

// 8) পরমমান (abs)
//    Returns the absolute value of a number.
দেখাও "পরমমান(-১২.৫): " + পরমমান(-১২.৫);

// 9) বর্গমূল (sqrt)
//    Computes the square root of a number.
দেখাও "বর্গমূল(১৬): " + বর্গমূল(১৬);

// 10) ঘাত (pow)
//     Raises the first number to the power of the second.
দেখাও "ঘাত(২, ৮): " + ঘাত(২, ৮);

// 11) সাইন (sin), কসাইন (cos), ট্যান (tan)
//     Common trigonometric functions in radians.
দেখাও "সাইন(৩.১৪/২) => " + সাইন(৩.১৪ / ২);
দেখাও "কসাইন(০) => " + কসাইন(০);
দেখাও "ট্যান(৩.১৪/৪) => " + ট্যান(৩.১৪ / ৪);

// 12) সর্বনিম্ন (min), সর্বোচ্চ (max)
//     Returns the smallest/largest value among the given numbers.
দেখাও "সর্বনিম্ন(১০, ৫, -৩, ৮) => " + সর্বনিম্ন(১০, ৫, -৩, ৮);
দেখাও "সর্বোচ্চ(১০, ৫, -৩, ৮) => " + সর্বোচ্চ(১০, ৫, -৩, ৮);

// 13) রাউন্ড (round)
//     Rounds a floating-point number to the nearest integer.
দেখাও "রাউন্ড(৩.৬৭) => " + রাউন্ড(৩.৬৭);

And so on. This snippet demonstrates user input, array functions, object manipulation, etc.


Array & Object Demo

ফাংশন testArrayAndObject() {
    ধরি arr = [10, 20, 30];
    দেখাও "First element of arr: " + arr[0];
    arr[2] = 300;
    দেখাও "Modified third element of arr: " + arr[2];

    ধরি obj = {
        name: "Borno Language",
        count: 1
    };
    দেখাও "Object name property: " + obj.name;
    obj.count = obj.count + 1;
    দেখাও "Updated count property: " + obj.count;

    ফেরত obj;
}

ধরি result = testArrayAndObject();
দেখাও "Returned object count: " + result.count;

Control Flow Demo

// If-Else
ধরি x = 15;
যদি (x > 10) {
    দেখাও "x is greater than 10";
} নাহয় {
    দেখাও "x is 10 or less";
}

// For loop with break/continue
ফর (ধরি i = 0; i < 5; i = i + 1) {
    যদি (i == 2) {
        দেখাও "Skipping i = 2";
        চালিয়ে_যাও;
    }
    যদি (i == 4) {
        দেখাও "Breaking at i = 4";
        থামো;
    }
    দেখাও i;
}

// While loop
ধরি count = 0;
যতক্ষণ (count < 3) {
    দেখাও "Count = " + count;
    count = count + 1;
}

Closures & Functions

ফাংশন createCounter() {
    ধরি counter = 0;

    ফাংশন increment() {
        counter = counter + 1;
        দেখাও "Counter = " + counter;
    }

    ফেরত increment;
}

ধরি counter1 = createCounter();
counter1(); // Counter = 1
counter1(); // Counter = 2
counter1(); // Counter = 3

About

Borno is a dynamically typed Bangla-based programming language that allows developers to write code using Bangla keywords and identifiers

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages