@adamsy/bhai-lang
Version:
<h1 align="center">Bhai Lang</h1> <p align="center"> <a href="https://lgtm.com/projects/g/DulLabs/bhai-lang/alerts/"><img alt="Total alerts" src="https://img.shields.io/lgtm/alerts/g/DulLabs/bhai-lang.svg?logo=lgtm&logoWidth=18"/></a> <a href="https://lgt
123 lines (80 loc) • 3.42 kB
text/typescript
export const TokenTypes = {
NULL_TYPE: null,
HI_BHAI_TYPE: "hi bhai",
BYE_BHAI_TYPE: "bye bhai",
BOL_BHAI_TYPE: "bol bhai",
BHAI_YE_HAI_TYPE: "bhai ye hai",
AGAR_BHAI: "agar bhai",
WARNA_BHAI: "warna bhai",
JAB_TAK_BHAI: "jab tak bhai",
BAS_KAR_BHAI: "bas kar bhai",
KAT_LO_BHAI: "kat lo bhai",
NALLA_TYPE: "NALLA",
SEMI_COLON_TYPE: ";",
OPEN_CURLY_BRACE_TYPE: "{",
CLOSED_CURLY_BRACE_TYPE: "}",
OPEN_PARENTHESIS_TYPE: "(",
CLOSED_PARENTHESIS_TYPE: ")",
COMMA_TYPE: ",",
NUMBER_TYPE: "NUMBER",
IDENTIFIER_TYPE: "IDENTIFIER",
SIMPLE_ASSIGN_TYPE: "SIMPLE_ASSIGN",
COMPLEX_ASSIGN_TYPE: "COMPLEX_ASSIGN",
ADDITIVE_OPERATOR_TYPE: "ADDITIVE_OPERATOR",
MULTIPLICATIVE_OPERATOR_TYPE: "MULTIPLICATIVE_OPERATOR",
RELATIONAL_OPERATOR: "RELATIONAL_OPERATOR",
EQUALITY_OPERATOR: "EQUALITY_OPERATOR",
STRING_TYPE: "STRING",
BOOLEAN_TYPE: "BOOLEAN",
LOGICAL_AND: "LOGICAL_AND",
LOGICAL_OR: "LOGICAL_OR"
};
export const SPEC = [
// Whitespcaes
{ regex: /^\s+/, tokenType: TokenTypes.NULL_TYPE },
// singke line Comments
{ regex: /^\/\/.*/, tokenType: TokenTypes.NULL_TYPE },
// multi line comments
{ regex: /^\/\*[\s\S]*?\*\//, tokenType: TokenTypes.NULL_TYPE },
// Symbols, delimiters
{ regex: /^;/, tokenType: TokenTypes.SEMI_COLON_TYPE },
{ regex: /^\{/, tokenType: TokenTypes.OPEN_CURLY_BRACE_TYPE },
{ regex: /^\}/, tokenType: TokenTypes.CLOSED_CURLY_BRACE_TYPE },
{ regex: /^\(/, tokenType: TokenTypes.OPEN_PARENTHESIS_TYPE },
{ regex: /^\)/, tokenType: TokenTypes.CLOSED_PARENTHESIS_TYPE },
{ regex: /^,/, tokenType: TokenTypes.COMMA_TYPE },
//Keywords
{ regex: /^\bhi bhai\b/, tokenType: TokenTypes.HI_BHAI_TYPE },
{ regex: /^\bbye bhai\b/, tokenType: TokenTypes.BYE_BHAI_TYPE },
{ regex: /^\bbol bhai\b/, tokenType: TokenTypes.BOL_BHAI_TYPE },
{ regex: /^\bbhai ye hai\b/, tokenType: TokenTypes.BHAI_YE_HAI_TYPE },
{ regex: /^\bagar bhai\b/, tokenType: TokenTypes.AGAR_BHAI },
{ regex: /^\bwarna bhai\b/, tokenType: TokenTypes.WARNA_BHAI },
{ regex: /^\bnalla\b/, tokenType: TokenTypes.NALLA_TYPE },
{ regex: /^\bjab tak bhai\b/, tokenType: TokenTypes.JAB_TAK_BHAI },
{ regex: /^\bbas kar bhai\b/, tokenType: TokenTypes.BAS_KAR_BHAI },
{ regex: /^\bkat lo bhai\b/, tokenType: TokenTypes.KAT_LO_BHAI },
// Number
{ regex: /^-?\d+/, tokenType: TokenTypes.NUMBER_TYPE },
// Boolean
{ regex: /^sahi/, tokenType: TokenTypes.BOOLEAN_TYPE },
{ regex: /^galat/, tokenType: TokenTypes.BOOLEAN_TYPE },
// Identifier
{ regex: /^\w+/, tokenType: TokenTypes.IDENTIFIER_TYPE },
// Equality operator: ==, !=
{regex: /^[=!]=/, tokenType: TokenTypes.EQUALITY_OPERATOR},
// Assignment operators: =, *=, /=, +=, -=
{ regex: /^=/, tokenType: TokenTypes.SIMPLE_ASSIGN_TYPE },
{ regex: /^[\*\%\/\+\-]=/, tokenType: TokenTypes.COMPLEX_ASSIGN_TYPE },
// operator
{ regex: /^[+\-]/, tokenType: TokenTypes.ADDITIVE_OPERATOR_TYPE },
{ regex: /^[*\/\%]/, tokenType: TokenTypes.MULTIPLICATIVE_OPERATOR_TYPE },
{regex: /^[><]=?/, tokenType: TokenTypes.RELATIONAL_OPERATOR},
// logical operators: &&, ||
{regex: /^&&/, tokenType: TokenTypes.LOGICAL_AND},
{regex: /^\|\|/, tokenType: TokenTypes.LOGICAL_OR},
// String
{ regex: /^"[^"]*"/, tokenType: TokenTypes.STRING_TYPE },
{ regex: /^'[^']*'/, tokenType: TokenTypes.STRING_TYPE },
];
export type Spec = typeof SPEC;