Semantic analysis is a compiler phase that adds information to the parse tree and checks for semantic errors, occurring between parsing and code generation. It can be implemented using two notations: syntax directed definitions and translation schemes, facilitating the addition of semantics to context-free grammars. Various types of syntax directed translations, such as s-attributed and l-attributed SDTs, help manage attribute evaluation based on the structure of the parse tree.