gpt4 book ai didi

c - 使用循环语句的 BNF 文法

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:30 26 4
gpt4 key购买 nike

为 C 的一个子集编写一个简单的 BNF 语法,它支持多个语句,包括赋值、if-else 和没有 block 语句的 while 语句。为你的非终结符使用有意义的名字(相对于神秘的字母)。假设变量由单个字母表示并且是整数。假定标准优先级规则适用于运算符 *、/、+、- 和括号。确保包含关系运算符(==、!=、<、>、>= 和 <=)。以下是您的语法的有效程序:

 a = -35;while (b > a);a = a + b;if (a >= 10);c = a;else c = b;

你能否扩展你的 BNF 以正确处理 C block 语句作为 while 或 if 或 else 的一部分?修改您的作品以支持: 而 (b > 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 语法吗?

最佳答案

没有。你写的是比语法更多的例子。语法解释了如何生成语言的所有有效结构。

例如

 <while> ::= while <expression> <block>

然后,您定义<expression>以一种允许用语言编写任何表达式的方式,并且<block>作为一个语句 block (一个简单的语句或用括号分组的几个语句)。

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

关于c - 使用循环语句的 BNF 文法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18957359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com