This document discusses formal methods for describing the syntax and semantics of programming languages, including context-free grammars, Backus-Naur Form (BNF), attribute grammars, and approaches for describing semantics. It provides examples of BNF rules and derivations. It also describes how attribute grammars can be used to specify static semantics by adding semantic attributes and rules to a context-free grammar.