Remember that these grammars are pretty arbitrary and there are many correct answers.
K1N 6N5 M5W 2E4 X0A 1A1
<postalcode> ::= <letter> <number> <letter> <number> <letter> <number>
<postalcode> ::= <forwardsortationarea> <space> <localdeliveryunit>
<forwardsortationarea> ::= <provarea> <loctype> <letter>
<localdeliveryunit> ::= <digit> <letter> <digit>
<provarea> ::= A | B | C | E | G | H | J | K | L | M | N |
P | R | S | T | V | X | Y
<loctype> ::= <rural> | <urban>
<rural> ::= 0
<urban> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<letter> ::= A | B | C | E | G | H | J | K | L | M | N |
P | R | S | T | V | W | X | Y | Z
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
CSI3125 MAT2743 PHY1200 EPI6581 CSI9999
<coursecode> ::= <acadunit> <coursenumber> <acadunit> ::= <letter> <letter> <letter> <coursenumber> ::= <year> <semesters> <digit> <digit> <year> ::= <ugrad> | <grad> <ugrad> ::= 0 | 1 | 2 | 3 | 4 <grad> ::= 5 | 6 | 7 | 9 <semesters> ::= <onesemester> | <twosemesters> <onesemester> ::= <frenchone> | <englishone> | <bilingual> <frenchone> ::= 5 | 7 <englishone> ::= 1 | 3 <bilingual> ::= 9 <twosemesters> ::= <frenchtwo> | <englishtwo> <frenchtwo> ::= 6 | 8 <englishtwo> ::= 2 | 4 <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
aba pop pop a pop elu par cette crapule a man a plan a canal panama
<palindrome> ::= a <palindrome> a | b <palindrome> b |
c <palindrome> c | d <palindrome> d |
e <palindrome> e | ...
| z <palindrome> z
<palindrome> ::= <letter>
<letter> ::= a | b | c | ... | y | z
<datafile> ::= <record> { <record> }
<record> ::= <field> { ; <field> } .
<field> ::= <integer> | <string>
<integer> ::= <digit> { <digit> }
<string> ::= " <char> { <char> } "
<char> ::= <letter> | <digit>
<letter> ::= the usual stuff
<digit> ::= the usual stuff
<datafile> ::= <record> . [ <datafile> ] <record> ::= <field> [ ; <record> ] <field> ::= <integer> | <string> <integer> ::= <digit> [ <integer> ] <string> ::= " <stringchars> " <stringchars> ::= <char> [ <stringchars> ] <char> ::= <letter> | <digit> <letter> ::= the usual stuff <digit> ::= the usual stuff
var i : integer;
var b : boolean;
var myfloat : real;
mychar : char;
x, y, z : integer;
<vardecl> ::= var <vardecllist> ;
<vardecllist> ::= <varandtype> { ; <varandtype> }
<varandtype> ::= <ident> { , <ident> } : <typespec>
<ident> ::= <letter> { <idchar> }
<idchar> ::= <letter> | <digit> | _
type string20 = packed array[1..20] of char;
type intptr = ^integer;
floatptr = ^real;
type herb = (tarragon, rosemary, thyme, alpert);
tinyint = 1..7;
student = record
name, address : string20;
studentid : array[tinyint] of integer;
grade : char
end;
<typedecl> ::= type <typedeflist>
<typedeflist> ::= <typedef> [ <typedeflist> ]
<typedef> ::= <typeid> = <typespec> ;
<typespec> ::= <typeid> |
<arraydef> | <ptrdef> | <rangedef> |
<enumdef> | <recdef>
<typeid> ::= <ident>
<arraydef> ::= [ packed ] array <lbrack> <rangedef> <rbrack> of <typeid>
<lbrack> ::= [
<rbrack> ::= ]
<ptrdef> ::= ^ <typeid>
<rangedef> ::= <number> .. <number>
<number> ::= <digit> [ <number> ]
<enumdef> ::= <lparen> <idlist> <rparen>
<lparen> ::= (
<rparen> ::= )
<idlist> ::= <ident> { , <ident> }
<recdef> ::= record <vardecllist> end ;