예제 #1
0
 def aux():
     txt = self.display.text()
     try:
         result = acc.parse(txt)
     except SyntaxError:
         self.display.setText('Invalid Syntax')
     except:
         self.display.setText('Value Error')
     else:
         if type(result) is ndarray:
             result = list(result)
         self.display.setText(str(result))
예제 #2
0
 def test_vector_sum(self):
     s = '[1,2,3]+[4,5,6]'
     self.assertEquals(list(acc.parse(s)), [5, 7, 9])
예제 #3
0
###################################

from parser import lexer, acc
from convert import converter
while True:
    res = ''
    try:
        s = input('calc > ')
    except EOFError:
        break
    try:
        lexer.input(s)
        print([(tok.type, tok.value) for tok in lexer])
    except:
        print('Lex Error')
        continue
    else:
        try:
            res = str(acc.parse(s))
            print(res)
        except SyntaxError:
            print('Invalid Syntax')
            continue
        except:
            print('Value Error')
            continue
        else:
            try:
                print(converter.parse(res))
            except:
                pass
예제 #4
0
 def test_log(self):
     s = 'log(5,25)'
     self.assertEquals(acc.parse(s), 2.0)
예제 #5
0
 def test_lcm(self):
     s = 'lcm(50,75)'
     self.assertEquals(acc.parse(s), 150)
예제 #6
0
 def test_gcd(self):
     s = 'gcd(50,75)'
     self.assertEquals(acc.parse(s), 25)
예제 #7
0
 def test_int_plus_minus(self):
     s = '3+5-7'
     self.assertEquals(acc.parse(s), 1)
예제 #8
0
 def test_n_choose_0(self):
     s = 'chs(4,0)'
     self.assertEquals(acc.parse(s), 1)
예제 #9
0
 def test_float_mult_divide(self):
     s = '0.2*9/0.6'
     self.assertEquals(acc.parse(s), 3.0)
예제 #10
0
 def test_least_square(self):
     s = 'lstsq[(1,2),(3,4),(4,5.2)]'
     self.assertEquals(str(acc.parse(s)), '(1.0571x1+0.9143x0)')
예제 #11
0
 def test_float_plus_minus(self):
     s = '0.3+0.5-0.7'
     self.assertEquals(acc.parse(s), Fraction(1, 10))
예제 #12
0
 def test_interpolation(self):
     s = 'intp[(1,2),(3,4)]'
     self.assertEquals(str(acc.parse(s)), '(1.0x1+1.0x0)')
예제 #13
0
 def test_vector_cross(self):
     s = '[1,2,3]*[1,2,3]'
     self.assertEquals(list(acc.parse(s)), [0, 0, 0])
예제 #14
0
 def test_vector_inner(self):
     s = '[1,2,3][4,5,6]'
     self.assertEquals(acc.parse(s), 32)
예제 #15
0
 def test_vector_times_num(self):
     s = '[1,2,3]*2'
     self.assertEquals(list(acc.parse(s)), [2, 4, 6])
예제 #16
0
 def test_negative_exp(self):
     s = '3E-5'
     self.assertEquals(acc.parse(s), Fraction(3, 100000))
예제 #17
0
 def test_n_choose_k(self):
     s = 'chs(4,2)'
     self.assertEquals(acc.parse(s), 6)
예제 #18
0
 def test_float_precedence(self):
     s = '0.2*9+1.2/6-1'
     self.assertEquals(acc.parse(s), 1.0)
예제 #19
0
 def test_n_choose_nplus1(self):
     s = 'chs(4,5)'
     self.assertEquals(acc.parse(s), 0)
예제 #20
0
 def test_negative_num(self):
     s = '-0.2+-0.8*-2.0'
     self.assertEquals(acc.parse(s), Fraction(7, 5))
예제 #21
0
 def test_invalid_n_choose_k(self):
     s = 'chs(4.5,2)'
     with self.assertRaises(SyntaxError) as se:
         acc.parse(s)
예제 #22
0
 def test_parenthesis(self):
     s = '(-0.2+-0.8)*-2.0'
     self.assertEquals(acc.parse(s), 2.0)
예제 #23
0
 def test_gcd2(self):
     s = 'gcd(27,64)'
     self.assertEquals(acc.parse(s), 1)
예제 #24
0
 def test_valid_factorial(self):
     s = '6!'
     self.assertEquals(acc.parse(s), 720)
예제 #25
0
 def test_invalid_lcm(self):
     s = 'lcm(1.2,3.7)'
     with self.assertRaises(SyntaxError) as se:
         acc.parse(s)
예제 #26
0
 def test_zero_factorial(self):
     s = '0!'
     self.assertEquals(acc.parse(s), 1)
예제 #27
0
 def test_ln(self):
     s = 'ln(8)'
     self.assertEquals(acc.parse(s), math.log(8))
예제 #28
0
 def test_invalid_factorial(self):
     s = '3.5!'
     with self.assertRaises(SyntaxError) as se:
         acc.parse(s)
예제 #29
0
 def test_positive_exp(self):
     s = '3E5'
     self.assertEquals(acc.parse(s), 300000)
예제 #30
0
 def test_polynomial_rangesum(self):
     s = '(1x2+2x1)sum(1,2)'
     self.assertEquals(acc.parse(s), 11)