This course introduces the fundamental concepts on which programming languages are based and the execution models supporting them. Topics includes the following: Language categories, Language design, Programming languages evolution, Syntax, Semantics, Lexical and syntax analyzers, Names, Bindings, Type checking, Scoping, Data types, Expressions, Statements, Statement-level control structures, Subprograms and its implementation, Abstract data types, Functional programming languages, Logic programming languages.