==== How Can We Define Languages in Computer Science? ==== Several scientific methods have been developed to precisely define the syntactic rules of languages. === Backus-Naur Form (BNF): === A **meta-language** used to describe the syntax of languages. | '''' | meta-symbol | | ''::='' | definition | | ''|'' | alternative | | ''{expression}'' | repetition (minimum and maximum repetitions can be specified using subscripts) | | ''GOTO'' | terminal symbol (in quotes for clarity, can also use apostrophes instead) | === 1. Example: Syntax of License Plates === Let’s start with a few typical examples and try to generalize: ''ABC-1234, GHT-234, HSD-333, AI-BB-654'' Syntax definition: $$ ::= | \\ ::=\{\}_3^3 − \{\}_3^3 \\ ::=\{\}_2^2 − \{\}_2^2 − \{\}_3^3 \\ ::=A|B|C...|Z \\ ::=0|1|2|3|4|5|6|7|8|9 \\ $$ === 2. Example: Syntax of Phone Calls in Hungary === Let’s list a few examples and try to generalize: ''062012345, +36301234567, 0680460046'' Syntax definition: $$ ::= \{\}_0^1 \\ ::=\{+\}_0^1 36|06 \\ ::=\{\}_1^2\\ ::=\{\}_6^7\\ ::=0|1|2|3|4|5|6|7|8|9 \\ $$ === 3. Example: How can we describe the BNF formula using itself? === \[ \langle \text{BN formula} \rangle ::= \langle \text{rule} \rangle \] \[ \langle \text{rule} \rangle ::= \langle \text{identifier} \rangle "::=" \langle \text{expression} \rangle \] \[ \langle \text{identifier} \rangle ::= "\langle" \langle \text{letter} \rangle \mid \left\lbrace \langle \text{letter} \rangle \mid \langle \text{digit} \rangle \right\rbrace "\rangle" \] \[ \langle \text{expression} \rangle ::= \langle \text{term} \rangle \left\lbrace "|" \langle \text{term} \rangle \right\rbrace \] \[ \langle \text{term} \rangle ::= \langle \text{factor} \rangle \left\lbrace \langle \text{factor} \rangle \right\rbrace \] \[ \langle \text{factor} \rangle ::= \langle \text{identifier} \rangle \mid \langle \text{terminal\_symbol} \rangle \] \[ \langle \text{terminal\_symbol} \rangle ::= \left\lbrace \langle \text{character} \rangle \right\rbrace \] \[ \langle \text{letter} \rangle ::= \langle \text{uppercase} \rangle \mid \langle \text{lowercase} \rangle \] \[ \langle \text{uppercase} \rangle ::= A \mid B \mid C \dots Z \] \[ \langle \text{lowercase} \rangle ::= a \mid b \mid c \dots z \] \[ \langle \text{digit} \rangle ::= 0 \mid 1 \mid 2 \mid 3 \mid 4 \mid 5 \mid 6 \mid 7 \mid 8 \mid 9 \]