什么是手柄?

句柄是连接文法中产生式规则右侧的子串,其归约到该文法规则左侧的非终结符是与最右侧推导相反的一步。

在每一步寻找处理

可以通过以下过程找到句柄 -

  • 它可以从左到右扫描输入字符串,直到遇到第一个 .> 。

  • 它可以向后扫描直到 <。遇到了。

  • 句柄是 < 之间的字符串。和 .>

示例 1 - 考虑语法

E → E + E|E * E|(E)id。

使用运算符优先级解析在每个步骤中查找用于减少字符串 id 1 + id 2 * id 3 的句柄。

解决方案

首先,在字符串的开头和结尾附加 $,即 $id 1 + id 2 * id 3 $。

使用优先关系表放置运算符和符号之间的优先关系。

∴ $<. 编号1。> +<。编号2 >*<。编号3 > $

在字符串上应用上述 3 个步骤。

细绳处理生产使用
<. id1. > +<. id2. >*<. id3. > $<。编号1。>E → id
$E+<。编号2。>*<。编号3。> $<。编号2。>E → id
$E + E *<。编号3。> $<。编号3。>E → id
$E + E * E $删除所有非终端
$+ * $插入运算符之间的优先关系
$<. +<.*。> $<.*. > 即,E * EE → E * E
$<. +。> $<。+。> 即,E+EE → E + E
$

Example2 - 在以下语法中计算非终结符 E、T 和 F 的第一个和最后一个终结符。

E → E + T| 吨

T → T * F | F

F → (E)| ID

解决方案

看到生产,我们可以判断

+ 是 E 的第一个终端

*是T的第一个终端

(, id 是 F 的第一个终端。

但是 E → T → F

∴F的第一个端点包含在T的第一个端点中,T的第一个端点包含在E的第一个端点中。

∴ First(F)= {(, id}

∴ First(T)=*∪ 第一个 (F) = {*, (, id}

First(E) = + ∪ 第 (T) = {+,*, (, id}

同样,可以找到最后一个终端。

非终端第一航站楼最后一个终端
F(, ID), id
*, (, ID*, ), id
+,*, (, id+,*, ), id.

示例 3 - 考虑语法

E → E + T|T

T → T ∗ F|F

F → (E)| ID

使用运算符优先级解析为字符串 id + id * id 执行堆栈实现。

解决方案

优先规则 <. , .> 或 =。在栈顶和当前输入符号之间保持。如果栈顶为非终结符,则栈顶之下的终结符将与当前输入符号进行比较。


输入字符串描述
$<。id + id * id $$<. 身份证,班次身份证
$<. id.>+id * id $< id > 是句柄,id。> +, 减少id, F → id 1
$F<。+id * id $$<. +, 移 +
$F +<。id * id $+ <。身份证,班次身份证
$F+<. id.>id $<。ID 。> 是句柄,将 id 减少到 F,F → id
$F + F<。id $+ <.*,移位 *
$F + F *<。id $* <。身份证,班次身份证
$F + F *<. id.>$<。ID 。> 是句柄,将 id 减少到 F,F → id
$F + F * F
$删除所有非终端。因为它们不参与优先关系。
$+*.>$插入优先关系
$<. +<.*.>$* . > $, 减少 <.*. >
$<. +.>$+ 。> $, <. + 。> 是处理,减少 <。+ 。>
$
$接受

以上是 什么是手柄? 的全部内容, 来源链接: utcz.com/z/361332.html

回到顶部