使用循环语句的BNF语法

rob*_*ert 0 c

为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语法吗?

SJu*_*n76 5

不。您写的不是语法而是更多的例子。语法说明了如何产生语言的所有有效构造。

例如

 <while> ::= while <expression> <block>
Run Code Online (Sandbox Code Playgroud)

然后,<expression>以一种允许使用该语言编写任何表达式的方式进行定义,并将其<block>定义为语句块(一个简单的语句或由方括号分组的几个语句)。

http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form