a terminal symbol
When you build a sentence from a grammar, some pieces are scaffolding that gets replaced and torn down, and some pieces are the finished bricks that stay in the wall. The terminals are the finished bricks: the actual symbols that appear in the strings the grammar produces, and that are never rewritten any further. The name says it — once a terminal appears, the rewriting TERMINATES for that piece.
Formally, the terminals are exactly the elements of the alphabet Σ (Sigma) of the context-free grammar (V, Σ, R, S). They are disjoint from the variables V, and no production rule has a terminal on its left-hand side, so there is no way to rewrite a terminal. A derivation finishes precisely when the current string contains terminals only — that final string of terminals is a member of the generated language. In a grammar for arithmetic, the terminals might be the digits, the plus and times signs, and parentheses; in a grammar for a programming language they correspond to the tokens that the lexer produces, like identifiers, keywords, and punctuation.
A handy convention in textbooks: terminals are usually written as lowercase letters, digits, or literal punctuation, while variables are uppercase letters — that lets you read a grammar at a glance. Do not confuse a terminal with a single character: in real language design a terminal is often a whole TOKEN class (the terminal 'number' might match 42 or 3.14), produced by the scanner before parsing begins.
In the grammar S → a S b | ε, the terminals are a and b (lowercase), the only variable is S, and ε (epsilon) is the empty string. Generated strings such as 'aabb' consist entirely of terminals.
Terminals are the alphabet letters that survive into the final string; they are never rewritten.
A terminal need not be a single character — in language design it is often a whole token class (the terminal 'identifier'), produced by the lexer. Terminals and variables must be disjoint.