通過語法推導樹快速求短語,簡單短語和句柄

在這里插入圖片描述


第一步:寫出規范推導(最右)序列

規范推導就是最右推導。我們的目標是從起始符號 E 出發,通過每步替換最右邊的非終結符,最終得到句型 R(P+i)

文法 G[E]:

  • E ::= RP | P
  • P ::= (E) | i
  • R ::= RP+ | RP* | P+ | P*

推導過程:

  1. E => RP

    • 我們選擇 E → RP 開始,因為目標句型以 R 開頭。現在句型是 RP,最右非終結符是 P
  2. => R(E)

    • 目標句型 R(P+i) 包含括號 ()。唯一能產生括號的規則是 P → (E)。我們用它替換最右的 P。現在句型是 R(E),最右(也是唯一)的非終結符是 E
  3. => R(RP)

    • 現在需要推導括號里的內容 P+i。它由兩部分組成。我們先用 E → RP 展開。現在句型是 R(RP),最右非終結符是 P
  4. => R(Ri)

    • 為了得到 P+ii 部分,我們用規則 P → i 替換最右的 P。現在句型是 R(Ri),最右非終-結符是 R
  5. => R(P+i)

    • 最后,為了得到 P+ 部分,我們用規則 R → P+ 替換最右的 R。推導完成。

規范推導序列為:
E => RP => R(E) => R(RP) => R(Ri) => R(P+i)


第二步:快速查找短語、簡單短語和句柄 (核心技巧)

方法:利用語法樹結構。
根據上面的推導過程,我們可以畫出這個句型對應的語法樹:

      E/ \R   P/|\( E )/ \R   P/ \  |P   + i

現在,我們可以用這棵樹來快速找出所有答案:

1. 找出所有短語

規則:語法樹中,任何一個以非終結符為根的子樹,其所有葉子節點從左到右組成的字符串,都是一個短語。

我們從下往上、從小到大找所有子樹:

  • 以最下面的 P 為根的子樹,葉子是 i短語是 i
  • R 為根的子樹,葉子是 P+短語是 P+
  • 以括號內的 E 為根的子樹,葉子是 P, +, i短語是 P+i
  • 以最右邊的 P 為根的子樹,葉子是 (, P, +, i, )短語是 (P+i)
  • 以最頂層的 E 為根的子樹(整棵樹),葉子是 R, (, P, +, i, )短語是 R(P+i)

所有短語列表: i, P+, P+i, (P+i), R(P+i)

2. 找出所有簡單短語

規則:簡單短語是一個直接由某條產生式一步推導而來的短語。在語法樹上,任何一個以非終結符為根的子樹,并且葉子節點和當前非終結符為父子關系(一步得來的),其所有葉子節點從左到右組成的字符串,都是一個短語。

我們檢查剛才找出的短語:

  • i: 是由 P → i 一步得來的嗎?是的。所以 i 是簡單短語
  • P+: 是由 R → P+ 一步得來的嗎?是的。所以 P+ 是簡單短語
  • P+i: 是由 E → P+i 一步得來的嗎?不是,E 先變成 RP,經過多步才得到。所以它不是簡單短語。
  • (P+i): 是由 P → (P+i) 一步得來的嗎?不是,P 是先變成 (E)。所以它不是簡單短-語。
  • R(P+i): 不是一步得來的。

所有簡單短語列表: i, P+

3. 找出句柄

規則:句柄是該句型的最左邊的簡單短語

  1. 看我們的句型 R(P+i)
  2. 看我們的簡單短語列表 i, P+
  3. 從左到右掃描句型 R(P+i),看哪個簡單短語先出現。
  4. 我們先遇到的是 P+

句柄是: P+


最終答案總結

  • 規范推導序列: E => RP => R(E) => R(RP) => R(Ri) => R(P+i)
  • 所有短語: i, P+, P+i, (P+i), R(P+i)
  • 所有簡單短語: i, P+
  • 句柄: P+

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/922210.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922210.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922210.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能學習輔助系統-部門管理開發

文章目錄準備工作工程搭建增刪改查查詢部門刪除部門新增部門修改部門查詢回顯修改數據日志技術準備工作 需求:部門管理的查詢、新增、修改、刪除 使用REST風格的URL: GET : 查詢POST :新增PUT : 修改DELETE &#x…

【圖解】idea中快速查找maven沖突

現象 今天啟動項目時,總是以下報錯,并退出SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/F:/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.13.3/log4j-slf4j-impl-2.13.3.jar!/org/slf4j/im…

LightGBM、XGBoost和CatBoost自定義損失函數和評估指標

LightGBM、XGBoost和CatBoost自定義損失函數和評估指標函數(縮放誤差)數學原理損失函數定義梯度計算評估指標LightGBM實現自定義損失函數自定義評估指標使用方式XGBoost實現自定義損失函數自定義評估指標使用方式CatBoost實現自定義損失函數自定義評估指…

2025-09-08升級問題記錄: 升級SDK從Android11到Android12

將 Android 工程的 targetSdkVersion 從 30 (Android 11)升級到 31(Android 12)需要關注一些重要的行為變更和適配點。 主要適配要點: 適配類別關鍵變更點適配緊迫性簡要說明組件導出屬性聲明了 Intent Filter 的組件…

利用OpenCV實現模板與多個對象匹配

代碼實現:import cv2 import numpy as npimg_rgb cv2.imread(mobanpipei.jpg) img_gray cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) template cv2.imread(jianto.jpg, flags0) h, w template.shape[:2]# 讀取圖像# # 順時針旋轉 90 度(k1&#xff0…

OS28.【Linux】自制簡單的Shell的修bug記錄

目錄 1.問題代碼 2.排查 前期檢查 查找是誰修改了environ[0] 使用gdb下斷點 查看后續的影響 分析出問題的split_commandline函數 3.反思 4.正確代碼 5.結論 6.除此之外...... ★提示: 此bug非常隱蔽,不仔細分析很難查出問題,非常鍛煉調試能力! 1.問題代碼 #includ…

Debian 系統上安裝與配置 MediaMTX

🎯 在 Debian 系統上安裝與配置 MediaMTX(原 rtsp-simple-server):打造輕量級流媒體服務器 作者:遠在太平洋 環境:Debian 10/11/12 | Ubuntu 可參考 關鍵詞:MediaMTX、rtsp-simple-server、RTSP…

分布式專題——10.4 ShardingSphere-Proxy服務端分庫分表

1 為什么要有服務端分庫分表? ShardingSphere-Proxy 是 ShardingSphere 提供的服務端分庫分表工具,定位是“透明化的數據庫代理”。 它模擬 MySQL 或 PostgreSQL 的數據庫服務,應用程序(Application)只需像訪問單個數據…

Mysql相關的面試題1

什么是聚集索引(聚簇索引)?什么是二級索引(非聚簇索引)? 聚集索引就是葉子節點關聯行數據的索引,二級索引就是葉子節點關聯主鍵的索引,聚集索引必須有且僅有一個,二級索引…

電涌保護器:為現代生活筑起一道隱形防雷網

何為電涌保護器?電涌保護器(Surge Protective Device,簡稱SPD)主要用于控制信號系統,保護電氣電子設備信號線路免受雷電電磁脈沖、感應過電壓、操作過電壓的影響,廣泛應用于工控、消防、安防監控、交通、電…

【uniapp微信小程序】掃普通鏈接二維碼打開小程序

需求:用戶A保存自己的邀請碼海報,用戶B掃描該普通連接二維碼,打開微信小程序,并且攜帶用戶A的邀請碼信息,用戶B登錄時,跟用戶A關聯,成為用戶A的下級。 tips:保存海報到手機相冊可以參…

LeetCode 378 - 有序矩陣中第 K 小的元素

文章目錄摘要描述題解答案題解代碼分析代碼解析示例測試及結果輸出結果時間復雜度空間復雜度總結摘要 在開發中,我們經常遇到需要處理大規模有序數據的場景,比如數據庫分頁、排行榜查詢、或者處理排序過的矩陣。LeetCode 第 378 題“有序矩陣中第 K 小的…

【Lua】Windows 下編寫 C 擴展模塊:VS 編譯與 Lua 調用全流程

? 目錄 ?🛫 導讀需求環境1?? 核心原理:Windows下Lua與C的交互邏輯2?? Windows下編寫步驟:以mymath模塊為例2.1 步驟1:準備Windows開發環境方式1:官網下載Lua源碼并編譯(可控性高)方式2&am…

Python快速入門專業版(二十九):函數返回值:多返回值、None與函數嵌套調用

目錄引一、多返回值:一次返回多個結果的優雅方式1. 多返回值的本質:隱式封裝為元組示例1:返回多個值的函數及接收方式2. 多返回值的接收技巧技巧1:用下劃線_忽略不需要的返回值技巧2:用*接收剩余值(Python …

python使用pip安裝的包與卸載

1:基本卸載命令 # 卸載單個包 pip uninstall package_name# 示例:卸載requests包 pip uninstall requests2:卸載多個包 # 一次性卸載多個包 pip uninstall package1 package2 package3# 示例 pip uninstall requests numpy pandas3&#xff1…

超級流水線和標量流水線的原理

一、什么是流水線?要理解這兩個概念,首先要明白流水線(Pipelining) 的基本思想。想象一個汽車裝配工廠:* 沒有流水線:一個工人負責組裝一整輛汽車,裝完一輛再裝下一輛。效率很低。* 有了流水線&…

【Ansible】管理復雜的Play和Playbook知識點

1.什么是主機模式?答:主機模式是Ansible中用于從Inventory中篩選目標主機的規則,通過靈活的模式定義可精準定位需要執行任務的主機。2.主機模式的作用答:篩選目標:從主機清單中選擇一個或多個主機/組,作為P…

FastGPT源碼解析 Agent 智能體應用創建流程和代碼分析

FastGPT對話智能體創建流程和代碼分析 平臺作為agent平臺,平臺所有功能都是圍繞Agent創建和使用為核心的。平臺整合各種基礎能力,如大模型、知識庫、工作流、插件等模塊,通過可視化,在界面上創建智能體,使用全部基礎能…

缺失數據處理全指南:方法、案例與最佳實踐

如何處理缺失數據:方法、案例與最佳實踐 1. 引言 在數據分析和機器學習中,缺失數據是一個普遍存在的問題。如何處理缺失值,往往直接影響到后續分析和建模的效果。處理不當,不僅會浪費數據,還可能導致模型預測結果的不準…

為什么Cesium不使用vue或者react,而是 保留 Knockout

1. Knockout-ES5 插件的語法簡化優勢 自動深度監聽:Cesium 通過集成 Knockout-ES5 插件,允許開發者直接使用普通變量語法(如 viewModel.property newValue)替代繁瑣的 observable() 包裝,無需手動聲明每個可觀察屬性。…