1樓:匿名使用者
1)優先關係矩陣
2)句型( a+s+s) 中的
短語:a+s, a+s+s, ( a+s+s)直接短語:a+s
控制代碼:a+s
lpp:a+s
一個編譯原理的問題
2樓:
first(α) 是符號串α的開始符號集合。
也就是說,用推導的方法對α進行推導,一次次地使用產生式,用產生式右部的符號串替換一個非終結符,所有那些可能出現在第一個符號位置的終結符,就構成了開始符號集。
比如,在c語言中,對於符號串“語句”來說,識別符號(賦值語句)、if(條件語句)、printf(輸出函式)這些單詞(終結符)都是它開始符號集合中的元素,而+(加號)、}(右花括號)不可能出現在“語句”的開頭,所以不是它的開始符號集合中的元素。
follow(a)是非終結符a的後跟符號集合。
它是指在所有可能的句型中,一切可能出現在非終結符a後面的一個終結符。
這裡要特別注意是在“句型”中。
你可以自己舉例,比如分析一下c語言中“表示式”後面可能跟哪些單詞,它們就是非終結符“表示式”後跟符號集合中的元素。
你說的這兩個集合的交集問題不存在。
因為它們針對的是不同型別的物件(一個是符號串,另一個是某個非終結符)。
實際上,在選擇集合問題中,考慮的不是它們的交集,而是一個產生式右部符號串的first集跟這個產生式左端非終結符的follow集的並集。
考慮交集的,發生在相同左部的不同產生式的選擇集合之間。
一個編譯原理的題?
3樓:匿名使用者
舉些例子就知道了(反例):
a、aaab
c、aabab
d、aaa
選b。既然有偶數個a,只要有a*的,基本不對,因為任意構造一個合法的串,你總能再加一個a而變成不合法的。
包含偶數個a的串主要還要考慮到中間穿插有b的情況,這個正規式構造比較複雜,得多想一想,選擇題還是反例吧:-)
一個編譯原理問題
4樓:匿名使用者
首先寫出指定句型的規範推導:
s→(l)→(l,s)→(l,(l))→(l,(s))→(l,(a))→(s,(a))
然後畫出分析樹如下圖
根據分析樹的葉子結點可以找出該句型的所有短語:
a s (a) s,(a) (s,(a))直接短語,就是經過一次非終結符替換得到的短語:
a s 沒了
控制代碼就是最左直接短語,要進行規約的部分,根據分析樹我們找到最左直接短語為:s
一道編譯原理題
5樓:
肯定的,你的a是多重定義的,原因如下:
原始檔在編譯時是要先預處理的,file1.c預處理的結果為#line 1 "對應路徑/file1.c"
#line 1 "對應路徑/head.h"
short int a = 10;
#line 3 "對應路徑/file1.c"
main()
而file2.c的預處理結果為
#line 1 "對應路徑/file2.c"
#line 1 "對應路徑/head.h“short int a = 10;
它倆編譯後兩者的資料區都有一個型別為short int的變數a,當然肯定是報這個錯誤啦
c語言編譯原理,C語言編譯原理
c語言編譯過程詳解 c語言的編譯連結過程是要把我們編寫的一個c程式 源 轉換成可以在硬體上執行的程式 可執行 需要進行編譯和連結。編譯就是把文字形式源 翻譯為機器語言形式的目標檔案的過程。連結是把目標檔案 作業系統的啟動 和用到的庫檔案進行組織形成最終生成可執行 的過程。過程 如下 從圖上可以看到,...
編譯原理 學的是什麼,什麼是編譯原理
許詩文 編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程式構造的一般原理和基本方法。內容包括語言和文法 詞法分析 語法分析 語法制導翻譯 中間 生成 儲存管理 優化和目標 生成。編譯原理是計算機專業設定的一門重要的專業課程。雖然只有少數人從事編譯方面的工作,但是這門課在理論 技術 方法上都對學生...
計算機的編譯原理很複雜嗎,編譯原理好學嗎?是偏硬體的嗎?
編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程式構造的一般原理和基本方法。內容包括語言和文法 詞法分析 語法分析 語法制導翻譯 中間 生成 儲存管理 優化和目標 生成。編譯原理是計算機專業設定的一門重要的專業課程。雖然只有少數人從事編譯方面的工作,但是這門課在理論 技術 方法上都對學生提供了系...