为 C 的一个子集编写一个简单的 BNF 语法,它支持多个语句,包括赋值、if-else 和没有块语句的 while 语句。为您的非终结符使用有意义的名称(相对于神秘的字母)。假设变量由单个字母表示并且是整数。假设标准优先规则适用于运算符 *、/、+、- 和括号。确保包含关系运算符(==、!=、<、>、>= 和 <=)。以下是您的语法的有效程序:
a = -35;while (b > a);a = a + b;if (a >= 10);c = a;else c = b;
您能否扩展您的 BNF 以正确处理 C 块语句作为 while 或 if 或 else 的一部分?修改你的作品以支持:while (b > a) a = a + b; printf(“循环中”);
使用我想出的上述语法
<statement> ::= a=-35
<while> ::= while (b>a)
<assign>::= a = a + b;
<if>::= if (a >= 10)
<assign> ::= c=a;
<else>
<assign> ::= c = b;
<while>::= while (b>a)
<assign>:= a = a + b;
<statement>::= printf ("in loop");
这是一个有效的 bnf 语法吗?