An expression-oriented programming language is a programming language in which every (or nearly every) construction is an expression and thus yields a value.[1] The typical exceptions are macro definitions, preprocessor commands, and declarations, which expression-oriented languages often treat as statements.
Lisp[2] and ALGOL 68 are expression-oriented languages. Pascal is not an expression-oriented language.
Critics, including language designers,[4][failed verification] blame expression-orientation for an entire class of programming mistakes wherein a programmer accidentally codes an assignmentexpression, which replaces a variable with an expression rather than testing it for equality with that expression.
The designers of Python implemented assignment as a statement rather than an expression, thus prohibiting assignment from nesting inside any other statement or expression.[7] (Until version 3.8 added 'assignment expressions', with a different syntax.[8])
In some expression-oriented languages, expressions that merely cause side effects return void types.