#! /usr/bin/python3 import sys from pathlib import Path from lexer import Lexer from tokens import TOKENS_DICT from parser import Parser from cmd import Cmd import warnings warnings.filterwarnings( "ignore") ### NOTE: use this to disable all the warnings during release lexer = Lexer() lexer.add_tokens(TOKENS_DICT) lexer.add_ignore("\s+") pg = Parser() pg.parse() parser = pg.get_parser() # Interactive Prompt for animeLang class AnimeLangPromt(Cmd): prompt = "animeLang > " intro = "welcowme to animeLang meow. And It's neowt that i was waitwing for you b-baaaka. *Tsun* " def default(self, line: str) -> bool: all_tokens = lexer.get_lexer().lex(line) print(parser.parse(all_tokens).eval())
import unittest from tests.cases import PRINT_TESTCASE_DICT, ARITHMETIC_TESTCASE_DICT, VARIABLE_TESTCASE_DICT, CONDITIONALS_TESTCASE_DICT from lexer import Lexer from tokens import TOKENS_DICT from parser import Parser lexer = Lexer() lexer.add_tokens(TOKENS_DICT) lexer.add_ignore('\s+') pg = Parser() pg.parse() parser = pg.get_parser() class TestAnimeLang(unittest.TestCase): def test_print(self): for i in PRINT_TESTCASE_DICT.keys(): all_tokens = lexer.get_lexer().lex(PRINT_TESTCASE_DICT[i][0]) ans = parser.parse(all_tokens).eval() self.assertEqual(ans, PRINT_TESTCASE_DICT[i][1]) print(i + " passed") def test_arithmetic_op(self): for i in ARITHMETIC_TESTCASE_DICT.keys(): all_tokens = lexer.get_lexer().lex(ARITHMETIC_TESTCASE_DICT[i][0]) ans = parser.parse(all_tokens).eval() self.assertEqual(ans, ARITHMETIC_TESTCASE_DICT[i][1]) print(i + " passed")