设有文法G[N]: N→D|ND D→0|1|2|3|4|5|6|7|8|9 (2)给出句子0123和268的最左推导和最右推导。 (1)G[N]定义的语言是什么?
时间: 2024-06-15 07:08:33 浏览: 228
根据文法G[N]的定义,语言L(G[N])是由非终结符N生成的所有字符串的集合。在这个文法中,非终结符N可以生成一个数字D,或者由一个数字D后面跟着另一个非终结符N生成的字符串。
所以,语言L(G[N])包含了所有由数字0到9组成的字符串。
对于问题(2),我们需要找出句子0123和268的最左推导和最右推导。
最左推导是从左到右选择最左边的非终结符进行替换,直到得到目标句子。最右推导则是从右到左选择最右边的非终结符进行替换。
对于句子0123:
最左推导:
N → ND → DND → 0ND → 01D → 012D → 0123
最右推导:
N → ND → N3D → N23D → N123D → N0123 → 0123
对于句子268:
最左推导:
N → ND → N6D → N26D → N268D → 268
最右推导:
N → ND → N8D → N68D → N268D → 268
相关问题
最左推导和最右推导作业 令文法 N ::= D | ND D ::=0|1|2|3|4|5|6|7|8|9 给出句子34的最左推导和最右推导。
最左推导和最右推导是分析语言文法生成式的过程,用于确定如何从基本非终结符开始,通过应用文法规则逐步构造出给定的句子。在这个例子中,我们有上下文无关文法 (CFG):
N ::= D | ND (N 可以由一个 D 或者一个 N 后面跟着一个 D 构成)
D ::= 0|1|2|3|4|5|6|7|8|9 (数字的产生式)
题目要求对句子 "34" 进行推导。
**最左推导(Leftmost Derivation, LMD)**:
1. 根据最左原则,首先尝试将整个句子作为 N 的子串处理,所以开始是最左 N。
2. N -> D,因此我们需要一个 D。
3. D -> 3,这是一个 D 的实例。
4. 现在我们有 NND,需要另一个 D。
5. D -> 4,再次构造一个 D。
6. 结果是 NND,符合原句 "34",停止推导。
最左推导序列:N -> D -> 3 -> N -> D -> 4
**最右推导(Rightmost Derivation, RMD)**:
1. 从最右边开始,先找到第一个 D。
2. D -> 4,这是最后一个 D。
3. 现在有 ND,需要一个完整的 N。
4. N -> D,接着找下一个 D。
5. D -> 3,再添加一个 D。
6. 最终得到 NND,即 "34"。
最右推导序列:D -> 4 -> N -> D -> 3
算法G[N]为: N→D|ND D→0|1|2|3|4|5|6|7|8|9 改造该文法,使其产生正整数
要改造该文法使其产生正整数,可以通过以下方式进行修改:
1. 将非终结符N的产生式改为N→D|ND,表示N可以由一个数字D或者一个数字D后跟一个N生成。
2. 将终结符D的产生式改为D→1|2|3|4|5|6|7|8|9,表示D可以是数字1到9中的任意一个。
修改后的文法如下:
G[N]为: N→D|ND
D→1|2|3|4|5|6|7|8|9
这样修改后的文法可以生成正整数。例如,根据该文法,可以生成以下正整数:
1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, ...
阅读全文