1. 程式人生 > >短語、控制代碼、素短語、最左素短語

短語、控制代碼、素短語、最左素短語

很久沒寫部落格了===

今天寫一發===

關於編譯原理 語法樹 控制代碼 簡單短語 短語 的區分,通過兩個例子來理解概念以及方法:

例子1——語法樹

-> a|b|(T)

T -> TdS|S

Vt={a,b,d,(,)}.Vn={S,T},S是開始符
句型(Sd(T)db)是S的一個推導,其中___是控制代碼;____是最左素短語;____是該句型的直接短語,_____是短語。

素短語的概念:它是一個遞迴的定義,至少含有一個終結符,並且除它自身之外不再含任何更小的素短語,所謂最左素短語就是處於句型最左邊的素短語的短語。而一個算符優先文法G的任何句型的最左素短語是滿足以下條件的最左子串NaNb…NcNdN(N是非終結符,a,b,c,d是終結符)

例項:句型T+T*F+id,求出其語法樹,可知,T*F是最左素短語,id也是素短語,但不是最左的。

解析:

題目中的句型可用下面的語法樹表示:
            S
         /  |  \
      (     T     )
        /   |   \
      T     d     S
     /|\          |
    T  d  S       b
    |    /|\
    S  (  T  )

一個句型的語法樹中任一子樹葉結點所組成的符號串都是該句型的短語,當子樹中不包含其他更小的子樹時,該子數葉結點所組成的字串就是該句型的直接(簡單)短語。
因此本題的直接短語的為 S 、(T)、b,短語有S、(T)、b、Sd(T)、Sd(T)db 、(Sd(T)db)。

d不是直接短語,因為d所在的樹還有子樹所以它不是 !

一個句型的最左直接短語彙稱為該句型的控制代碼

素語是一個短語,它至少含有一個終結符,而且除它自身以外不再含有更少的素短語,對於句型(Sd(T)db)的素短語是(T)、b.

每個句型對應一棵語法樹
每棵語法樹的葉子結點從左到右排列構成一個句型
每棵語法樹的子樹的葉子結點從左到右排列構成一個短語
每棵語法樹的簡單子樹(只有父子兩層結點)的葉子結點從左到右排列構成一個簡單(直接)短語
每棵語法樹的最左簡單子樹(只有父子兩層結點)的葉子結點從左到右排列構成控制代碼
素短語是至少包含一個終結符的短語,但它不能包含其它素短語
最左推導:在每個推導過程中,總是首先考慮對當前最左邊的非終結符號進行推導
最右推導:在每個推導過程中,總是首先考慮對當前最右邊的非終結符號進行推導

例子2——直接推導

已知文法G[S] S::=aB|bA
             A::=a|aS|bAA
             B::=aBB|bS|b
句型aabbAb的控制代碼是
A.a     B.ab
C.b     D.bA
解析:
句型aabbAb的控制代碼是D: bA; 
S->aB->aaBB->aabSB->aabbAB->aabbAb 
按照最左推導,其中的S->bA這步是最後的直接推導(即它推出的bA不再被繼續往下推導),雖然B->b也是這樣的,但不是最左的。 
總結
畫語法樹
    一個節點的所有子葉子節點從左到右相連即是該句型的短語
  當子樹中不包含其他更小的子樹時,該子數葉結點所組成的字串就是該句型的直接(簡單)短語——重點看該子葉子節點的兄弟節點。最左簡單短語為控制代碼 直接推導
按最左推導,最後的直接推匯出的結果是簡單短語,最左簡單短語為控制代碼
控制代碼 簡單短語 短語 素短語 都是取自句型的一部分
來源:http://blog.sina.com.cn/s/blog_733bf6e00100v1b2.html

相關推薦

短語控制短語短語

很久沒寫部落格了=== 今天寫一發=== 關於編譯原理 語法樹 控制代碼 簡單短語 短語 的區分,通過兩個例子來理解概念以及方法: 例子1——語法樹 S -> a|b|(T) T -> TdS|S Vt={a,b,d,(,)}.Vn={S,T},S

短語直接短語控制短語

以此為例子: 先畫出語法樹,例:                S        /       |        \      (         T         )           /     |     \         T      d      S     /    |   \  

編譯原理:短語短語直接短語控制的基本概念

素短語的概念:它是一個遞迴的定義,至少含有一個終結符,並且除它自身之外不再含任何更小的素短語,所謂最左素短語就是處於句型最左邊的素短語的短語。而一個算符優先文法G的任何句型的最左素短語是滿足以下條

編譯原理之找短語控制短語

1.定義 句型、句子、語言 設文法G=(VT,VN,S和P)。如果S =>* α,則稱α是一個句型。僅含終結符號的句型是一個句子。語言 L(G)是有文法G產生的所有句子組成的集合:L(G)

編譯原理:短語直接短語控制短語

概念 如果S->* αAβ and A->+γ,則稱γ是句型αγβ的相對於變數A的短語  如果S->* αAβ and A->γ,則稱γ是句型αγβ的相對於變數A的直接(簡單)短語 最左直接短語叫做控制代碼 其實最簡單的判斷方法直接畫出語法樹

編譯原理之子樹與短語控制

·語法樹與子樹                 語法樹 根:開始符號 子樹:某一非終結符號(子樹的根)及其下面的分支 葉:樹的末端結點 語法樹的全部末端結點(自左向右)形成當前句型                     ·子樹與短語、控制代碼 1、短語:子樹

檔案控制的其他方法游標操作與檔案內容的迴圈

.closed 檢視控制代碼是否關閉 f = open("a.txt", "w") print(f.closed) f.close() print(f.closed) .encoding 檢視檔案控制代碼的編碼方式,即顯示使用什麼編碼開啟的而不是原檔案是以什麼編碼儲存的 f =

Python+selenium 獲取瀏覽器視窗座標控制

1.0 獲取瀏覽器視窗座標 python目錄可找到Webdriver.py 檔案定義了get_window_rect()函式,可獲取視窗的座標和大小(長寬),但出現”Command not found

CUDA進階第六篇-GPU資源(視訊記憶體控制等)管理

最近在加速一個影象演算法,符合《CUDA進階第五篇-如何估算出程式的GPU加速比》中的第二種情況,程式由核函式和GPU API實現,但是資源管理特別差,視訊記憶體和控制代碼在程式中使用時才申請。每次函式執行都要申請和釋放一遍,非常耗費時間。優化方案一:C++重構我想到的第一個

MFC 獲得各類指標控制的方法

最近有些人在問MFC程式設計一些要點,有一些控制代碼的獲取、指標的獲取是常見的問題,本文將對這些問題做以解釋,參考了前人的筆錄(見reference),希望能夠幫助大家更方便地進行MFC程式開發。    一般我們使用的框架是VC提供的Wizard生成的MFC App W

對Java中的物件例項控制直接指標的理解

        虛擬機器在建立物件的時候,會優先查詢常量池中是否有該物件的例項,如果沒有則需要載入、解析、初始化class,然後分配記憶體,初始化記憶體,設定物件(HASH CODE 、 GC年代等),最後執行init才算是建立完物件。        物件即例項。     

理解:語法樹,短語,直接短語控制

  概念: 語法樹求短語、簡單短語和控制代碼: 1)短語:子樹的末端結點形成的符號串。 2)簡單子樹:只有一層分支的子樹。 3)直接短語(簡單短語):簡單子樹的末端結點形成的符號串。 4)控制代碼:子樹中最左邊的那棵只有父子兩代的子樹的所有葉結點自左至右排列起來,就是該句型的控制代碼。

控制短語可歸字首

控制代碼、最左素短語、可歸字首 1.定義 控制代碼:最左直接短語(一個句型的語法樹中任一子樹葉結點所組成的符號串都是該句型的短語); 最左素短語:處於矩形最左邊的素短語(素短語是包含有終結符的短語); 可歸字首:規範句型的一個字首,這種字首包含控制代碼且不包含

GetWindowGetTopWindow和GetNextWindow(視窗控制獲取!!!)

GetWindow //uCmd 可選值:   GW_HWNDFIRST = 0; {同級別第一個}   GW_HWNDLAST  = 1; {同級別最後一個}   GW_HWNDNEXT  = 2; {同級別下一個}   GW_HWNDPREV  = 3;

C# winform winApi 根據傳入handle 控制獲取 其它視窗,如:使用中的子視窗同級視窗等。

//根據傳入的視窗控制代碼,獲取到同級、頂級、低階的視窗,根據GetWindowCmd 傳入的不同獲取也不同,詳細看GetWindowCmd 類說明 [DllImport("user32.dll", SetLastError = true)] static exter

Linux的開啟檔案表:開啟檔案表檔案描述符開啟的檔案控制以及i-node之間的關係

    在Linux系統中一切皆可以看成是檔案,檔案又可分為:普通檔案、目錄檔案、連結檔案和裝置檔案。檔案描述符(file descriptor)是核心為了高效管理已被開啟的檔案所建立的索引,其是一個非負整數(通常是小整數),用於指代被開啟的檔案,所有執行I/O操作的系統呼叫都通過檔案描述符。程式剛剛啟動的

VMware安裝虛擬機器提示控制無效vmci.sys不正確模組“DevicePowerOn”啟動失敗 問題解決

1、在虛擬機器安裝資料夾裡找到 .vmx 字尾的檔案; (.vmx字尾的,名字是你自己建立虛擬機器取的) 2、右鍵用記事本或者 notepad++ 開啟這個檔案; 3、找到 vmci0.pre

C#獲得windows工作列視窗控制及一些操作(放大縮小關閉隱藏……)

需呼叫API函式 需在開頭引入名稱空間using System.Runtime.InteropServices; 1、通過視窗名字查詢 [DllImport("user32.dll", EntryPoint = "FindWindow")] public static extern In

Android異常一非同步任務導致的視窗控制洩漏問題(記憶體洩漏)

首先來看一下報錯日誌: 05-05 10:36:41.009: E/WindowManager(4243): Activity com.tao.MyActivity has leaked window [email protected] that was orig

JavaScript事件型別事件事件控制

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>表單提交、重置事件的應用</title> <script language="javascript" t