The grammar defines a concrete grammar. The parse trees contain a lot more detail than the abstract syntax trees. Most languages include precedence of operators. Parsing programs by hand is painful. Use a parser generator instead.
Parser generators take an input which is part programming language and part grammar.
Parser generators can also spot ambiguity, and generate efficient parsers. Imperative Programming Common Features of Imperative Languages Imperative languages are based on assignment. Storage is allocated and deallocated explicitly. The type declaration determines the data representation. Some languages also supply common Abstract Datatypes such as enumeration types, hash tables, lists, etc.