in English prose with examples, From Fortran 90 onwards, the language was described using a variant of BNF. Cobol used a two-dimensional metalanguage. Pascal used both syntax diagrams and equivalent BNF. BNF uses recursion to express repetition, so various extensions have been proposed to allow direct indication of repetition. Statements and keywords Some programming language grammars reserve keywords or mark them specially, and do not allow them to be used as identifiers. This often leads to grammars which are easier to parse, requiring less lookahead. No distinguished keywords Fortran and PL/1 do not have reserved keywords, allowing statements like: in PL/1: IF IF = THEN THEN ... (the second IF and the first THEN are variables). in Fortran: IF (A) X = 10... conditional statement (with other variants) IF (A) = 2 assignment to a subscripted variable named IF As spaces were optional up to Fortran 95, a typo could completely change the meaning of a statement: DO 10 I = 1,5 start of a loop with I running from 1 to 5 DO 10 I = 1.5 assignment of the value 1.5 to the variable DO10I Flagged words In Algol 60 and Algol 68, special tokens were distinguished explicitly: for publication, in boldface e.g. begin; for programming, with some special marking, e.g., a flag ('begin), quotation marks ('begin'), or underlined (begin on the Elliott 503). This is called "stropping". Tokens that are part of the language syntax thus do not conflict with programmer-defined names. Reserved keywords Certain names are reserved as part of the programming language and can not be used as programmer-defined names. The majority of the most popular programming languages use reserved keywords. Early examples include FLOW-MATIC (1953) and COBOL (1959). Since 1970 other examples include Ada, C, C++, Java, and Pascal. The number of reserved words depends on the language: C has about 30 while COBOL has about 400. Semantics Semantics is concerned with the meaning of a program. The standards documents for many programming languages use BNF or some equivalent to express the syntax/grammar in a fairly formal and precise way, but the semantics/meaning of the program is generally described using examples and English prose. This can result in ambiguity. In some language descriptions the meaning of compound statements is defined by the use of 'simpler' constructions, e.g. a while loop can be defined by a combination of tests, jumps, and labels, using if and