Package: maryChain
README.mdIntroductionmaryChainis a powerful programming language designed to meet modern programming needs. It combines characteristics from functional and object-oriented programming paradigms to create an expressive, dynamic, and powerful syntax. The language includes important features such as:Functions and lambdasPipeliningBinary operationsControl structures (conditional and loops)Lazy evaluationSupport for standard data types like numbers, strings, and booleansType casting functionsSupport for modules and namespacesSupport for commentsMain FeaturesFunctions and LambdasFunctions are first-class citizens inmaryChainand can be declared using thedefkeyword. Lambda expressions, on the other hand, are represented by theLAMBDAkeyword and allow for creating inline anonymous functions.PipeliningPipelining is a feature that allows the output of one function to be directly fed as the input of the next. ThePIPEsymbol is used to represent this operation.Binary OperationsStandard mathematical binary operations are supported, including addition (PLUS), subtraction (MINUS), multiplication (TIMES), and division (DIVIDE). Comparison operators are also supported, including equals (EQUALITY), greater than (GREATER), less than (LESS), greater or equal (GREATEREQUAL), and less or equal (LESSEQUAL).Control StructuresConditional structures likeIF,THEN,ELSE, along with loops likeWHILEDO, are provided in themaryChainlanguage.Lazy EvaluationInmaryChain, expressions can be declared as lazy, which means they are not evaluated until their result is needed.Data TypesmaryChainsupports standard data types such as numbers, strings, and booleans.Type Casting FunctionsType casting is supported through casting functions likeINTEGERCAST,DOUBLECAST,STRINGCAST,BOOLEANCAST.Support for Modules and NamespacesmaryChainprovides support for modules and namespaces usingIMPORTandNAMESPACE_OPfeatures. This allows for better code organization and modular programming.CommentsComments inmaryChainare supported, enabling developers to include explanations and documentation within the code itself.BNF Grammar formaryChainThe BNF (Backus-Naur Form) grammar formaryChaincan be inferred from the parser implementation and is as follows:<program> ::= <import>* <expression>?
<import> ::= IMPORT <IDENTIFIER> AS <IDENTIFIER>
<expression> ::= <assignment> | <let_in> | <binop> | <uminus> | <paren_expression> | <term> 
<assignment> ::= <IDENTIFIER> EQUALS <expression>
<let_in> ::= LET <IDENTIFIER> EQUALS <expression> IN <expression>
<binop> ::= <expression> <bin_op> <expression>
<uminus> ::= MINUS <expression>
<paren_expression> ::= LPAREN <expression> RPAREN
<term> ::= <factor>
<factor> ::= NUMBER | STRING | BOOLEAN | <function_call> | <IDENTIFIER>
<function_call> ::= <IDENTIFIER> LPAREN <args> RPAREN
<args> ::= <arg>* 
<arg> ::= <expression>This grammar represents the syntactic structure of amaryChainprogram. The keywords in the language are represented as they are, while in<bin_op>,<IDENTIFIER>,<args>, and<arg>, the angle brackets signify a category of symbol.Please note that this is a simplified representation of the `maryChain` grammar for illustration purposes. In the actual parser, additional rules and constructs are included to handle precedence, associativity, and complex expressions.