This document describes syntax and semantics for programming languages. It begins by defining syntax as the form or structure of a language and semantics as the meaning. Formal methods for describing syntax include context-free grammars, Backus-Naur Form (BNF), and attribute grammars. Semantics can be described through operational semantics which defines meaning through state changes during execution or denotational semantics which provides an abstract definition using recursive functions. The document provides examples of BNF rules, derivations, and attribute grammars.