首页 文章资讯内容详情

什么是手柄?

2026-06-02 1 花语

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

在每一步寻找处理

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

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

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

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

示例1-考虑语法

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

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

解决方案

首先,在字符串的开头和结尾附加$,即$id1+id2*id3$。

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

∴$<.编号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,F→id1$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

$删除所有非终端。因为它们不参与优先关系。$+*.>$插入优先关系$<.+<.*.>$*.>$,减少<.*.>$<.+.>$+。>$,<.+。>是处理,减少<。+。>$

$接受