Semantic improvement

# semantic allows variables with same name in different scope
# semantic expressions keeps line number
# auxiliary print tree module
# symbol table documentation
# new test cases