Glossary
--------

problem-solving:
    The process of formulating a problem, finding a solution, and
    expressing the solution.

high-level language:
    A programming language like C++ that is designed to be easy for
    humans to read and write.

low-level language:
    A programming language that is designed to be easy for a computer to
    execute. Also called “machine language” or “assembly language.”

portability:
    A property of a program that can run on more than one kind of
    computer.

formal language:
    Any of the languages people have designed for specific purposes,
    like representing mathematical ideas or computer programs. All
    programming languages are formal languages.

natural language:
    Any of the languages people speak that have evolved naturally.

interpret:
    To execute a program in a high-level language by translating it one
    line at a time.

compile:
    To translate a program in a high-level language into a low-level
    language, all at once, in preparation for later execution.

source code:
    A program in a high-level language, before being compiled.

object code:
    The output of the compiler, after translating the program.

executable:
    Another name for object code that is ready to be executed.

algorithm:
    A general process for solving a category of problems.

bug:
    An error in a program.

syntax:
    The structure of a program.

semantics:
    The meaning of a program.

parse:
    To examine a program and analyze the syntactic structure.

syntax error:
    An error in a program that makes it impossible to parse (and
    therefore impossible to compile).

run-time error:
    An error in a program that makes it fail at run-time.

logical error:
    An error in a program that makes it do something other than what the
    programmer intended.

debugging:
    The process of finding and removing any of the three kinds of errors.


.. dragndrop:: chapter_one_glossary_1
   :feedback: Try again!
   :match_1: natural language|||Any of the languages people speak that have evolved naturally.
   :match_2: high-level language|||A programming language like C++ that is easy for humans to read and write.
   :match_3: low-level language|||A programming language that is easy for a computer to execute.
   :match_4: formal language|||Any of the languages people have designed for specific purposes.


.. dragndrop:: chapter_one_glossary_2
   :feedback: Try again!
   :match_1: interpret|||To execute a program in a high-level language by translating it one line at a time.
   :match_2: compile|||To execute a program in a high-level language by translating it all at once.
   :match_3: source code|||A program in a high-level language, before being compiled.
   :match_4: object code|||The output of the compiler, after translating the program.


.. dragndrop:: chapter_one_glossary_3
   :feedback: Try again!
   :match_1: portability|||A property of a program that can run on more than one kind of computer.
   :match_2: executable|||Another name for object code that is ready to be executed.
   :match_3: algorithm|||A general process for solving a category of problems.
   :match_4: bug|||An error in a program.


.. dragndrop:: chapter_one_glossary_4
   :feedback: Try again!
   :match_1: problem-solving|||The process of formulating a problem, finding a solution, and expressing the solution.
   :match_2: syntax|||The structure of a program.
   :match_3: semantics|||The meaning of a program.
   :match_4: parse|||To examine a program and analyze the syntactic structure.


.. dragndrop:: chapter_one_glossary_5
   :match_1: syntax error|||An error in a program that makes it impossible to parse and compile.
   :match_2: run-time error|||An error in a program that makes it fail upon execution.
   :match_3: logical error|||An error in a program that makes it do something other than what the programmer intended.
   :match_4: debugging|||The process of finding and removing any of the three kinds of errors.
