summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/bnf/bnfexample.tex
blob: 45d7f3b146cb460dd9bc2893459e69957c252d69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
% here's the example
\input generic.tex
\input bnf.tex

\begingrammar
%		
<input>:	{$\phi$};
		<statement>.\par

<statement>:	"$\{$" <compound> "$\}$" [";"] ;
		<single> [";"] ;
		";".

<compound>:	<single> ";" <compound> ;
		<single>.

<single>:	"if" "(" <expression> ")" <statement> ["else" <statement>];
		"case" "$\{$" <case-body> "$\}$";
		"for" "(" <expression> ";" <expression> ";" <expression> ")",
			<statement>;
		"while" "(" <expression> ")" <statement>;
		"do" <expression> "while" "(" <expression> ")";
		"sum" "(" <expression> ";" <expression> ")" <statment>;
		"product" "(" <expression> ";" <expression> ")" <statment>;
		"break";
		"continue";
		"return" <expression>;
		"clear";
		"load" <expression>;
		"save" <expression>;
		"release" <expression>;
		"show" ["variables" | "functions" | "set" | "all" | <expression>];
		"set"  ["prompt" | "precision"] [<expression>];
		<equation>.

<case-body>:	"case" <expression> ":" <compound> <case-body>;
		 "default:" <compound>

<equation>:	<var> "=" <expression>;
		<var>"[" <selector> "]" = <expression>;
		<function> = <input>;
		<expression>.

<selector>:	<factor> "," <factor>;
		<factor> ",";
		"," <factor>.

<expression>:	<term> "+" <expression>;
		<term> "--" <expression>.		

<term>:		<factor> <operator> <term>.

<factor>	<pre-op> <factor$'$> <post-op>.

<factor$'$>:	<number>;
		"+" <number>;
		"--" <number>;
		"(" <number> ")";
		<variable>;
		<variable>"[" <selector> "]";
		<string>;
		<matrix>;
		<function>.

<pre-op>:	"++" | "--{\kern 1pt}--" | "$\sim$" | "!".

<post-op>:	"$\uparrow$" <factor> 
		| "**" <factor>;
		"++" | "--{\kern 1pt}--" | "!".		

<matrix>:	"[" <row-list> "]".

<row-list>:	"[" <value-list> "]" [","] <row-list>;
		"[" <value-list> "]" [","] <row-list>;
		<value-list>.

<value-list>:	[ <string> ] <expression> "," <value-list>;
		[ <string> ] <expression>.

<function>:	<variable> "(" <arg-list> ")".

<arg-list>:	$\phi$;
		<variable> "," <arglist>;
		"\dots".

<string>:	" `` "  <anything> " '' ".

<number>:	<real-number>;
		"$\{$" <real-number> "," <real-number> "$\}$";
		{$\backslash$}b[01][01]+;
		{$\backslash$}o[07][07]+;
		\$[0-9A-Fa-f][0-9A-Fa-f]+.

%<real-number>:	[\+--]?[0-9][0-9]+[\.[0-9]+]?[[eE][0-9][0-9]+].

<operator>:	"*" |	 "/"	|     "$\backslash$"	| "\%";
		"==" |	 "!="	|     "$>$" 		| "$<$"  
		| "$<$=" | "$>$=";
		"\ul ="	| "\ul !=" |  "\ul $<$" | "\ul $>$" 
		| "\ul$<$=" | "\ul$>$=";
		"\&"	 | "$\vert$"  | "$\uparrow\uparrow$";
		"\&\&"	| "$\Vert$"  | "\ul$\uparrow$".
		
\endgrammar
\bye