# single non-negative integer 1 1\n positive int 1 0 0\n zero 2 2\n positive int 12345678 12345678\n another positive int # single negative integer -1 -1\n negative one -12345678 -12345678\n another negative int # positive and negative Integers -1 -1\n unary - 0 0\n 0 without sign -0 0\n negative 0 -10 -10\n another negative int 0001 1\n int with pad -0001 -1\n negative int with pad # floats .1 + 1 1.1\n float with leading dot -1.0001 -1.0001\n negative float 1.2 1.2\n positive float 1.2*2-2.0+3 3.4\n float operation # binary plus 1+2 3\n two summands 1+2+3 6\n three summands 1+0+3 4\n three summands including 0 1+2+3+4+5+6+7+8+9+10 55\n ten summands -1+10 9\n negative int in expression # binary minus 2-1 1\n subtraction with two operands 1-1 0\n subtraction with two operands 1-2 -1\n subtraction with two operands -1- -2 1\n subtraction with two operands -1+ -2- -4+10 11\n subtraction with four operands -1- -6+3-2 6\n subtraction with five operands # multiplication 2*2 4\n multiplication with two operands 2*2*2 8\n multiplication with three operands 2*0 0\n multiplication with zero # division 2/2 1\n division with two operands 2/2/2 0.5\n division with three operands 0/2 0\n division with zero (not by zero) # modulus 2%2 0\n modulus with remainder zero 3%2 1\n modulus with remainder not zero # precedences 2/2+.1 1.1\n precedence of div 2*2+.4 4.4\n precedence of mul .1-6/2 -2.9\n precedente of div 2%2+4 4\n precedence of modulus # parenthesis (1) 1\n one in parenthesis (1+2)-3 0\n precedence of parenthesis -(1+2)-3 -6\n parenthesis with minus (1+2)-(5+1-2)+7-(8-100) 98\n various parenthesis (1+2)*3 9\n precedence of parenthesis (1*2)*3 6\n parenthesis with mul (1*2)+3 5\n parenthesis with plus (1*2)+((((3+4)+5)*6)*7) 506\n parenthesis within parenthesis # semicolons ; '' one semicolon ;1 1\n semicolon at the begging of line ;;;1 1\n more that one semicolon ;; '' only semicolons 1; 1\n semicolon at end of line 1;; 1\n more than one semicolon at the end 1; ; ; ;; 1\n more than one semicolon at end of line with ws 1; 2 1\n2\n two expressions separated by a semicolon 1;;;;; ; ; 2 1\n2\n two expressions separated by a semicolon and ws 1+1+1;2+2+2;3+3-1+3+1 3\n6\n9\n 3 additive expression with semicolons 1+1*1;2+2*2 2\n6\n additive and mul expression with semicolons 3-3/3;4+4%4; 5-5+5 2\n4\n5\n minus, mul, plus, mod expression # newlines 1\n1+1\n1+1+1 1\n2\n3 TODO parse error with newlines and new grammar # named expressions a 0\n uninitialized a a;b;c 0\n0\n0\n more uninitialized vars a;a=1;a 0\n1\n assign number to lexical a=11;-a -11\n assign number to lexical a;a=1+1;a 0\n2\n assign number to expression a;b;a=4;b=5;c=6;a;b;c 0\n0\n4\n5\n6\n assign several lexicals # increment and decrement a=a+1;a;a 1\n1\n simple increment ++k;k 1\n1\n pre-increment k++;k 0\n1\n post-increment --k;k -1\n-1\n pre-decrement k--;k 0\n-1\n post-decrement a;a=1;a;++a;a 0\n1\n2\n2\n increment test a;a=1;1;--a;a 0\n1\n0\n0\n decrement test # pow 1^1 1\n simple pow 2^2 4\n another simple pow 2^2^2 16\n two pows 2^2+1 5\n pow precedence 2^(2+1) 8\n pow precedence # strictly less 1<1 0\n false less 1<2 1\n true less 2<1 0\n false less 1+1<2+2 1\n precedence with plus # less than or equal 1<=1 1\n true less or equal 1<=2 1\n true less or equal 2<=1 0\n false less or equal 1+1<=1+1 1\n precedence with plus # strictly greater 1>1 0\n false greater 1>2 0\n false greater 2>1 1\n true greater 2+2>1+1 1\n precedence with plus # greater than or equal 1>=1 1\n true greater or equal 1>=2 0\n false greater or equal 2>=1 1\n true greater or equal 1+1<=1+1 1\n precedence with plus # equal and not equal 1==1 1\n true equal 1==0 0\n false equal 1!=1 0\n false not equal 1!=0 1\n true not equal # boolean operators !1 0\n not 1 !-1 0\n not negative 1 !0 1\n not 0 !0 1\n not 0 !!1 1\n not not 1 !!9 1\n not not 9 !!-1 1\n not not negative 1 !!0 0\n not not 0 1&&1 1\n 1 and 1 9&&-1 1\n and with other true integers 1&&0 0\n 1 and 0 0&&1 0\n 0 and 1 0&&0 0\n 0 and 0 1||1 1\n 1 or 1 1||0 1\n 1 or 0 0||1 1\n 0 or 1 0||0 0\n 0 or 0 1&&0||0&&1 0\n and/or precedence test 1 1||0&&0||1 1\n and/or precedence test 2 # Strings "basic calculator" basic calculator string "123456789" 123456789 string with digits only "abc 123456789" abc 123456789 string with digits and letters "first\nsecond" first\nsecond string with a newline