Rename ArrayEmpty to ArrayCtor
Add MatrixCtor syntax complex[| row_dim, col_dim |]
Change matrix decl from [[]] to [|]
Now we are able to compile the generated code with a pre-compiled static library libquark.a
Add codegen.qk to test code generation
Done ForwardDecl codegen
Done CompoundStatement codegen
Set up skeleton for gen_expr. Done basic types codegen
Allow complex and int to do binop math
Change op_tag MatrixMath to MatrixKronecker
Done expr-Binop codegen
Done expr-Unop. Fix string literal codegen
Done expr-Queryop. Enforce a new semantic rule that queryop must be performed on an lvalue, not a qreg literal
Done expr-Lval
Done expr-Postop
Done expr-Assign
Done expr-FunctionCall
Modify SAST to include array/matrix type directly, instead of their elem type
Done expr-ArrayLiteral
Done expr-ArrayCtor and MatrixCtor