【編譯原理復習筆記】屬性文法

屬性文法

也稱為屬性翻譯文法,由 Knuth 提出,以上下文無關文法為基礎
(1)為每個文法符號(終結符與非終結符)配備相關的屬性,代表與該文法符號相關的信息
(2)屬性文法對于每個產生式都配備了對應的語義規則,標明了語義關系的傳遞
在這里插入圖片描述

屬性的分類

綜合屬性

自下而上的傳遞信息,根據產生式右部的符號屬性計算左部被定義符號的綜合屬性
在語法樹中,即根據子節點的屬性和自身的自身屬性來計算父節點的綜合屬性

繼承屬性

自上而下傳遞信息,根據右部候選式的符號屬性與左部的屬性計算右部候選式中符號的繼承屬性
在這里插入圖片描述

屬性依賴

對于每個產生式 A → α A \to \alpha Aα都有對應的語義規則,每條規則的形式可以寫作:
b,c1,c2 等都為標識符對應的屬性
b = f ( c 1 , c 2 , . . . , c k ) b = f(c_1,c_2,...,c_k) b=f(c1?,c2?,...,ck?)
則我們說red:屬性 b 依賴于 c1,c2 等
這種依賴又分為我們所提到的綜合屬性或繼承屬性
(1)若 b 為綜合屬性,則 c1,c2 等為產生式右部文法符號的屬性
(2)若 b 為右部某個文法符號的繼承屬性,則 c1,c2 可能為產生式左部或右部任何符號的屬性
注意:因為終結符沒有子節點,所以終結符只有綜合屬性,由詞法分析器提供

語義規則

(1)對出現在右邊的繼承屬性和左邊的綜合屬性都必須提供相應的計算規則,而且只能使用相應產生式中的文法符號
(2)出現在左邊的繼承規則和右邊的綜合屬性不由對應產生式的屬性計算規則進行計算,而是由其他產生式的屬性規則計算或者由相關參數提供

帶注釋的語法樹

在這里插入圖片描述
e.g.3*5+4n 利用第一組產生式
對于綜合屬性,一邊自下而上分析構建語法樹一邊使用語義規則代入
在這里插入圖片描述
由此可以得到帶注釋的語法分析樹
對于繼承屬性,則先構建語法樹,然后自上而下填寫,對于 addtype,就是在符號表中填寫其對應名字,屬性對應 addtype 中后項(通常為父節點)所對應的屬性
在這里插入圖片描述

屬性計算

語義規則的計算可以用來:產生代碼/在符號表中存放信息/執行動作,blue:對輸入串的翻譯就是根據語義規則的計算
語法制導翻譯法就是將輸入串轉化為合適的語法樹,然后選擇適合的語法規則計算屬性
基于語法的語義分析方式是多樣的,主要有以下三種:
(1)依賴圖
(2)樹遍歷
(3)依賴掃描

依賴圖

一顆語法樹中的節點的繼承屬性和綜合屬性的依賴關系可以由依賴圖來描述
若屬性 b 依賴于屬性 c,則從 c 有一條有向邊指向屬性 b
根據依賴圖,如果一個屬性文法不存在屬性之間的循環依賴關系(環),則稱則稱該文法是良定義的
在這里插入圖片描述

樹遍歷

假設語法樹已建立,且樹中已帶有開始符號的繼承屬性和終結符的綜合屬性,此后以某種遍歷順序遍歷語法樹,直到最終所有屬性都被計算出來
遞歸的調用 VisitNode 方法
在這里插入圖片描述

一遍掃描

語法樹需要反復使用 visitNode,屬于多遍掃描,一遍掃描則是根據語法分析的過程同時計算屬性值
語義規則的計算時機:
(1)自上而下分析,一個產生式匹配輸入串成功時計算語義規則
(2)自下而上分析,一個產生式被歸約時計算語義規則
抽象語法樹:
建立表達式的抽象語法樹
mknode(op,left,right)建立運算符號節點,left 和 right 分別指向左子樹和右子樹
mkleaf(id,entry)建立標識符節點
mkleaf(num,val)建立數節點
在這里插入圖片描述

一遍掃描與自下而上的語法分析器配合工作
在這里插入圖片描述

S屬性文法

只含有綜合屬性,使用自下而上的分析器,在原本的狀態-符號棧中 增加附加域存放綜合屬性值
假設 A → X Y Z A \to XYZ AXYZ對應的語義規則為 A . a = f ( X . x , Y . y , Z . z ) A.a = f(X.x,Y.y,Z.z) A.a=f(X.x,Y.y,Z.z)
歸約時,將 X、Y、Z 的狀態,符號,屬性彈出,然后將 A 的狀態符號屬性壓入棧頂

L 屬性文法

L 屬性文法適合一遍掃描的自上而下分析,通過深度優先地遍歷語法樹。對于 A → X 1 X 2 . . . X i A \to X_1X_2...X_i AX1?X2?...Xi?,Xi 的繼承屬性依賴于:
(1)A 的繼承屬性
(2)Xi 左邊符號 X1,X2 等的屬性,而不包括右側
red:S屬性文法屬于 L 屬性文法

翻譯模式

語義規則只給出了屬性計算的定義,但是沒有給出屬性計算的先后順序,可以在屬性文法的基礎上進一步給出使用順序,就叫翻譯模式
翻譯模式:將語義規則與屬性用花括號括起來放在合適的位置上,用來表示語法制導翻譯的時機
在這里插入圖片描述

注意將中綴表達式換成了后綴表達式
(1)當只需要綜合屬性的時候,將賦值動作放在相應產生式最右側的末尾
T → T 1 ? F T . v a l : = T 1 . v a l × F . v a l T \to T_1*F\\ \\{T.val:=T_1.val\times F.val\\} TT1??FT.val:=T1?.val×F.val
(2)如果既有綜合屬性又有繼承屬性,在建立翻譯模式時就必須保證:產生式右邊符號的繼承屬性必須在這個符號之前計算出來
(3)一個動作不能夠使用其右邊的綜合屬性
(4)產生式左部的非終結符的綜合屬性必須等其所有應用的屬性被計算出之后才能計算,且需要放在末尾計算

語義動作時機統一

如果能夠使所有語義動作都放在產生式的末尾,就可以使每次語義執行的時機統一
方法:
(1)添加一個產生式: M → ? M \to \epsilon M?
(2)把嵌入在產生式中間的語義動作用 M 代替,并將這個動作放在產生式 M TO EPSILON 的末尾
在這里插入圖片描述

消除翻譯模式的左遞歸

在這里插入圖片描述

這里可以理解 R.i 為繼承屬性,R.s 為綜合屬性,繼承屬性必須放在非終結符前,所以 Ri 的語義動作都在 Ri 前,Rs 則放在產生式最后給左部賦值
在這里插入圖片描述

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

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

相關文章

【LSTM】基于Matlab的LSTM模型建模(代碼)

訓練目標:用LSTM訓練數據 數據:隨時間遞增,患者患病的概率(橫坐標1個單位代表1個時間單位) 以下代碼可直接運行 clc clear close all warning off % 關閉報警信息 %% 1.數據操作 % 1.1.導入數據&#x…

數據鏈路層協議——以太網協議

1. 數據鏈路層 網絡層用于將數據從一臺主機發送到另一臺主機。傳輸層用于將數據可靠的從一臺主機發送到另一臺主機。(網絡層沒有保證可靠性的策略,傳輸過程中可能會出現各種意外,例如:丟包,網絡擁塞等。通過傳輸層可以…

跨域問題的4種解決方案

文章導讀 前言 跨域問題指的是在Web開發中,由于瀏覽器的同源策略限制,當一個網頁嘗試訪問與它不同源(協議、域名或端口不同)的資源時,可能會遇到安全限制導致無法正常訪問的問題。這種策略旨在防止惡意網站讀取或修改其…

yarn的基本命令和用法

Yarn通過并行安裝、離線模式、確定性安裝以及更好的依賴解析算法,為開發者提供了更快、更穩定、更安全的包管理體驗。它保留了npm的大部分功能,并在此基礎上做了大量優化,下面我們就來詳述Yarn的核心命令和實用技巧。📚 安裝Yarn…

【MySQL精通之路】InnoDB(7)-鎖和事務模型(2)-事務模型

主博客: 【MySQL精通之路】InnoDB(7)-鎖和事務模型-CSDN博客 上一篇: 【MySQL精通之路】InnoDB(7)-鎖和事務模型(1)-鎖-CSDN博客 下一篇: 目錄 1.事務隔離級別 2.1 可重復讀 2.2 讀已提交 2.3 讀取未提交 2.4 序列化讀 2.自動提交、…

訂餐系統總結、

應用層: SpringBoot:快速構建Spring項目,采用“約定大于配置”的思想,簡化Spring項目的配置開發。 SpringMvc:Spring框架的一個模塊,springmvc和spring無需通過中間整合層進行整合,可以無縫集成。 Sprin…

完整的數據可視化方法集

在當前的大數據時代,了解如何可視化數據是UI/UX設計師技能的重要組成部分。如今,幾乎所有的公司都需要良好的數據可視化作為確定業務方向和決策的參考。數據的可視化結果越好,用戶的決策就越科學。 1、什么是數據可視化 數據可視化是將信息…

張量 t-product 積(matlab代碼)

參考文獻:Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3節中 t-product 的定義: 塊循環矩陣: 參考知乎博主的例子及代碼:(t-product與t-QR分解,另一篇傅里葉對…

HTML5 設備訪問及輸入輸出設備交互

目錄 設備訪問輸入設備交互輸出設備交互設備訪問 設備信息訪問 navigator.userAgent:獲取瀏覽器的用戶代理字符串,從中可以解析出設備類型、操作系統、瀏覽器版本等信息。 const userAgent = navigator.userAgent; console.log(userAgent); // 輸出類似 "Mozilla/5.0…

算法(Algorithm)

算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,代表著用系統的方法描述解決問題的策略機制。也就是說,算法能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。算法應該具有…

【python004】miniforge可行替代方案實戰總結(最近更新中)

1.熟悉、梳理、總結項目研發實戰中的miniforge日常使用中的問題。隨著版本更新,做了一些變動,如商業化限制,取消一些語法等。 2.歡迎點贊、關注、批評、指正,互三走起來,小手動起來!

vue通過for循環生成input框后雙向綁定失效問題

有些時候頁面上有太多的表單元素&#xff0c;一個個的寫太過繁瑣&#xff0c;拿 input 框舉例&#xff0c;眾多的 input 框&#xff0c;無非就是輸入框前的說明和 input 框的 name 屬性不一樣 <el-form :inline"true" :model"formInline" size"mi…

01-05.Vue自定義過濾器

目錄 前言過濾器的概念過濾器的基本使用給過濾器添加多個參數 前言 我們接著上一篇文章01-04.Vue的使用示例&#xff1a;列表功能 來講。 下一篇文章 02-Vue實例的生命周期函數 過濾器的概念 概念&#xff1a;Vue.js 允許我們自定義過濾器&#xff0c;可被用作一些常見的文本…

軟件模塊的耦合

軟件模塊的耦合 耦合是指軟件模塊之間的依賴程度&#xff0c;耦合越低&#xff0c;模塊之間的獨立性越高&#xff0c;軟件的可維護性、可重用性也越高。下面是幾種常見的耦合類型的概念&#xff1a; 數據耦合&#xff08;Data Coupling&#xff09;&#xff1a; 當一個模塊通…

Python ? 使用代碼解決今天中午吃什么的重大生存問題

1. 環境安裝 安裝Python代碼環境參考文檔 2. 代碼塊 import random# 準備一下你想吃的東西 hot ["蘭州拉面", "爆肚面", "黃燜雞", "麻辣香鍋", "米線", "麻食", "羊肉泡饃", "肚絲/羊血湯&qu…

doxygen 1.11.0 使用詳解(九)——包含公式

目錄 Doxygen allows you to put LATEX formulas in the output (this works only for the HTML, LATEX and RTF output. To be able to include formulas (as images) in the HTML and RTF documentation, you will also need to have the following tools installed latex: …

定時監測服務器磁盤是否超過閾值,超過就刪除docker 鏡像

達到指定百分比 刪除鏡像腳本 df -h 查找到 內存占用信息 &#xff0c;得到的 文件系統名稱是 overlay的&#xff0c;Use% 達到70就進行刪除docker 鏡像 #!/bin/bash# 設置磁盤使用閾值 THRESHOLD70# 獲取 overlay 文件系統的磁盤使用百分比 DISK_USAGES$(df -h | grep overl…

利用sentence bert 實現語義向量搜索

目錄 基于pytorch的中文語言模型預訓練:https://github.com/zhusleep/pytorch_chinese_lm_pretrain/tree/master sentence_emb.py search_faiss_robert768.py faiss_index.py gen_vec_save2_faiss.py 基于pytorch的中文語言模型預訓練:https://github.com/zhusleep/pytorch_…

[協議]stm32讀取AHT20程序示例

AHT20溫度傳感器使用程序&#xff1a; 使用i2c讀取溫度傳感器數據很簡單&#xff0c;但市面上有至少兩個手冊&#xff0c;我這個對應的手冊貼出來&#xff1a; main: #include "stm32f10x.h" // Device header #include <stdint.h> #includ…

數智賦能內澇治理,四信城市排水防澇解決方案保障城市安全運行

由強降雨、臺風造成城市低洼處出現大量積水、內澇的情況時有發生&#xff0c;給人們出行帶來了極大不便和安全隱患&#xff0c;甚至危及群眾生命財產安全。 為降低內澇造成的損失&#xff0c;一方面我們要大力加強城市排水基礎設施的建設&#xff1b;另一方面要全面掌握城市內澇…