为C的子集编写一个简单的BNF语法,该语法支持多个语句,包括赋值,if-else和while语句而没有block语句。为您的非终结符使用有意义的名称(与隐含字母相对)。假设变量用单个字母表示,并且是整数。假定标准优先级规则适用于运算符*,/,+,-和括号。确保包括关系运算符(==,!=,<,>,> =和<=)。以下是您的语法的有效程序:
a = -35;while (b > a);a = a + b;if (a >= 10);c = a;else c = b;
Run Code Online (Sandbox Code Playgroud)
您能否在一段时间内(如果有的话)扩展BNF以正确处理C块语句?修改产品以支持:(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");
Run Code Online (Sandbox Code Playgroud)
这是有效的bnf语法吗?
c ×1