文法G[S]: S→V V→T|ViT T→F|T+F F→)V*|( (1)给出(+(i(的最右推导 (2)指出句型F+Fi的短语、句柄、素短语 (3)文法G[S]是否是OPG?若是,给出(1)中句子的分析过程
时间: 2024-01-24 09:19:55 浏览: 134
(1)最右推导为:S → V → ViT → +iT → +(iT) → (+(i))
(2)句型F+Fi的短语为F+Fi,句柄为F,素短语为Fi。
(3)文法G[S]是OPG(算符优先文法)。下面是(+(i))的分析过程:
首先,构造算符优先关系表:
| | + | * | ( | ) | i | $ |
|---|---|---|---|---|---|---|
| + | > | < | < | > | < | > |
| * | > | > | < | > | < | > |
| ( | < | < | < | = | < | |
| ) | > | > | | > | | > |
| i | > | > | | > | | > |
| $ | < | < | < | | < | = |
然后进行分析:
S → V → ViT → +iT → +(iT) → (+(i))
使用算符优先关系表,可以得到:
( + ( i ) )
= ( + T )
= ( T + i )
= ( F + i )
= ( i + F )
= ( i + T )
= ( i + ViT )
= ( i + +iT )
= ( i + +(iT) )
= (+(i))
因此,(+(i))的分析过程如上。
相关问题
文法G[S]:S→V V→T|ViT T→F|T+F F→)V*|( (1)给出(+(i(的最右推导 (2)指出句型F+Fi的短语、句柄、素短语 (3)文法G[S]是否是OPG?若是,给出(1)中句子的分析过程
(1)最右推导过程:
S → V → ViT → (i)T → (i)F → (i)(V*) → (i)(T*) → (i)(F*) → (i)(T+F*) → (i)(F+i*)
(2)句型F+Fi的短语是F+i,句柄是i,素短语是Fi。
(3)文法G[S]是OPG(算符优先文法)。以下是(1)中句子的分析过程:
(i)+(i)
→(i)T+(i)
→(i)F+(i)
→(i)(V*)+(i)
→(i)(T*)+(i)
→(i)(F*)+(i)
→(i)(T+F*)+(i)
→(i)(F+i*)+(i)
→(i)+(i)
解释下面这段代码 for(vector<size_t>::const_iterator vit=vIndices2.begin(), vend=vIndices2.end(); vit!=vend; vit++) { const size_t i2 = *vit; if(CurrentFrame.mvpMapPoints[i2]) if(CurrentFrame.mvpMapPoints[i2]->Observations()>0) continue; if(CurrentFrame.mvuRight[i2]>0) { const float ur = u - CurrentFrame.mbf*invzc; const float er = fabs(ur - CurrentFrame.mvuRight[i2]); if(er>radius) continue; } const cv::Mat &d = CurrentFrame.mDescriptors.row(i2); const int dist = DescriptorDistance(dMP,d); if(dist<bestDist) { bestDist=dist; bestIdx2=i2; } }
这段代码是一个for循环,它的主要功能是在当前帧中找到一个最佳的匹配点。具体来说,它遍历了一个名为vIndices2的vector,这个vector包含了所有可以用来匹配的点的索引。对于每一个索引,代码首先检查对应的地图点是否已经被观测过,如果是则跳过,否则继续执行。然后,如果这个点在右目上也有对应的匹配点,并且它们的距离大于一个给定的半径,则也跳过。接着,代码计算当前点的描述子与给定的地图点描述子之间的距离,并将这个距离与当前的最佳距离进行比较,如果更小,则将当前点作为最佳匹配点,并更新最佳距离。最后,整个for循环结束后,代码会返回找到的最佳匹配点的索引。
阅读全文