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
|