Syntax
Concrete Syntax defines the way the language is actually written on paper or on a screen and includes sufficient information to parse it.
Abstract Syntax specifies the relations between logical parts of a the language, it can be simpler and may not contain enough information to parse the language unambiguously.
y ::= if e then y else y fi concrete
y ::= if e then y else y abstract