編譯原理的用法
1. 左結合和右結合的問題~和編譯原理有關
B與第一個*結合:用編譯原理的運算符的結合性來解釋的話,就是假設*是左結合的。當運算分量(本例中是B)兩側都有運算符(本例中是*)的時候,採用左結合。即B與B左邊的*結合。
eg: L —>A*B*C 先計算 A*B 然後計算(A*B)*C。
不知道你懂么??
2. C#中如何將輸入的字元串識別為(轉化為)程序語句
c#有個System.CodeDom的命名空間,
他就是專門用來動態構建c#代碼並編譯執行的.
用法就自己查查吧
3. 數據結構、操作系統、編譯原理,哪些課實際應用較多
我曾經是一個計算機專業的學生,普通大學畢業生,現在已經轉行當了中學的計算機教師,因為負荷不了軟體公司高難度的工作,可以作為過來人告訴你需要給你建議的是,軟體專業的不能說哪門課很重要,只能說是無論有多少門都很重要,你說不能兼顧,你該自己思考一下,為什麼不能兼顧呢?時間不過的話,是否是自己在課堂上用法不對?或者是在課下復習兼顧學習的用法不對?真正等到自己去工作去踏入社會以後這個想法很強烈就是為什麼當初不再多學一點,因為我去過軟體公司上班,平常的的成績名列前茅,但是開始接手工作,就覺得自己學的還不夠多。計算機的專業總是要比別人付出的更多。
想找重要的學,你是太急於求成,可以這么說把,沒有重點,最基礎的永遠是應用到最簡單的原理。
4. 編譯原理及實踐的題目
常量傳送比常量合並更難,是因為常量是存在靜態區,而變數是存在棧區
5. C轉義字元及編譯原理
.2f的意思就是控制輸出的精度,指顯示兩位小數
不能加strlen是因為這個是字元串的操作,你要加string.h的頭文件
(Q)這個用法我沒用過,由於現在沒用自己的電腦,看不到stdio.h的具體內容,不知道printf的函數實現,不過你可以打開stdio.h這個文件,就可以看到函數的實現,相信就比較好理解了,當然你要保證(q)這樣的用法是正確的
6. 如何編寫簡單的java編譯器(用java語言),比如說能翻譯諸如"public static void main" 的就行。
看看《編譯原理》或許對你有幫助。
要編譯一門語言,你要知道它的語法 syntax 和語義 semantics,語法是用來檢查所謂的「語法錯誤」,語義是讓語句變得有意義,對計算機程序語言來說,就是把它翻譯成計算機能執行的指令。
你需要了解最基本的一些概念諸如正則表達式,上下文無關語言,上下文相關語言,等等。
《編譯原理》是很通用的基礎書籍,裡面我記得有介紹了 yacc 的用法,這是 GNU 里的一款編譯器的編譯器,對應有一個 Java 的 Project 叫 yacc for Java,你可以去 google 找一下。
如果你能寫出一個檢查語法錯誤的程序就已經很不錯了,你可以考慮改做一個編輯器之類的軟體(只需要找錯,不需要編譯)。如果你真要做編譯器,工程量巨大不說,你首先需要對至少兩種語言都熟悉,你需要對計算機的指令和它的執行方式有深刻理解,尤其是 Java 這種動態的高級語言,有類啊對象啊什麼的,要把它翻譯成機器指令實屬不易,至今除了 Sun 的 javac 都沒有很成功的編譯器,那個 GCJ(把 Java 編譯成本地代碼)的嘗試也只成功了一半,以前還被 MingW 包含在工具箱里(和 GCC 什麼的一起),但是有很多特性不支持,而且已經很久不更新了,新版本的 MingW 里都沒有了。想一個人從零開始設計一款 Java 的編譯器,即使是專家都做不到啊。
7. goes用法四個非終結符的last vt集
G[S]中的開始符號是為S啊,文法中並沒出現.開始符號應為P吧
FIRSTVT(P)={(,a}
FIRSTVT(F)={a}
LASTVT(F)={a}
LAASTVT(P)={),a}
8. MFC中 free((void*)m_pszAppName)的用法作用,m_pszAppName應該是個什麼值
在MFC中,m_pszAppName是CWinApp類的成員變數,
在創建APP類的實例中,通過AfxLoadString(AFX_IDS_APP_TITLE,)函數獲取的值,這個值是在資源文件中設置的,如果資源中去掉這個字元串,那麼通過獲取exe文件名獲取。
這些代碼,是被MFC封裝的,在工程中不可見,只是通過一堆宏實現了創建,並調用了CWinApp類函數完成的。
另,這個字元串保存的不是程序路徑,而是「應用程序名字」,一般和主框架窗口標題相同。
9. AXD使用方法
如何正確使用ads(axd)
1、ads是由arm公司提供的編譯和調試環境,非常好,不容質疑!搞arm開發的人員,不能不用ads,例如要開發一個驅動,首先是在ads中編譯、調試通過,才會加入操作系統中,這是開發過程。 2、Ads中codewarria是編譯環境,在這個環境中,應正確設置程序工作或調試的地址,這兩個地址不一定同址,每次只能設置一種,除非它們相同。設置是通過菜單項edit->target setting完成的。編譯環境中的這個地址是由鏈結器標記在程序上的(暫且這樣說吧,因為這部分實際涉及的是編譯原理中的鏈接定位問題,它主要涉及的是程序中的跳轉地址,這是與軟體相關的)。這兩個地址都必須與硬體地址配合,程序才能正常工作。因為mcu(arm)是硬體定址的,比如4510在正常初始化後,flash被定位在0x0地址,這時如果mcu有一條指令是跳轉到0x0地址,那麼mcu一定會將PC指向flash的0x0地址,mcu卻是由軟體控制的。如果這時remap了,flash被定位在0x1000000地址,但寫在flash中的程序仍然控制mcu跳轉到0x0地址,那麼PC就指向了sdram的0x0地址,那裡寫著什麼是你的事情了。
3、工作地址是指編譯好的程序(一般是*.bin文件)寫入flash的地址,如軟體程序工作地址從0x0開始,flash也應該定位在0x0地址開始,軟體與硬體地址要相同,才能正常工作。當然,如果做remap,把程序拷貝到新的0x0地址處,也就是sdram中,程序也可以正常工作的。
4、如果用axd調試,則是另外一種情況:程序必須寫在sdram中,而不是flash中。Sdram的地址在那裡呢?4510上電後,一般設置在0x1000000,而把flash設置在0x0地址。如果codewarria編譯時把程序設置在0x0地址,調試時就會把軟體載入在一個「虛」位置,這個位置(地址)是flash的地址,mcu是無法把程序寫入flash中,程序就成為空中飄盪的幽靈,這時如果用反匯編,可以看到有些內容已經變質了,不是你的程序了,明白是為什麼嗎?而執行的話,mcu讀取flash中的內容,它們並非你的程序,結果是跑飛了。解決辦法是remap(對4510。如是44b0,請在codewarria編譯環境中把程序定位在 sdram段,如需中斷,請在flash中0x0地址先寫入相關中斷向量,並跳轉到sdram中),把sdram設置在0x0地址,再載入程序。 5、Remap時,請用axd中的命令行方式,程序是實現不了的。即:system view->command line interface。只有先把硬體地址設置的與程序相同了、程序段可以被裝入sdram中時,才可載入程序。
6、切記這兩點:調試程序一定要放在sdram中、sdram地址與程序地址一定要相同。
7、0x8000這個地址是怎麼來的呢?原來:0x0地址是中斷向量地址,這要佔用幾十個位元組