這個語言的乙個程式由乙個塊組成,該塊中包含可選的宣告和語句。語法符號basic表示基本型別。
program –> block
block –>
decls -> desls decl | ε
decl -> type id;
type -> type [num] | basic
stmts -> stmts stmt | ε
把複製當做乙個語句(而不是表示式中的運算子)可以簡化翻譯工作。
stmt -> loc=bool;
| if(bool) stmt
| if(bool) stmt else stmt
| while(bool) stmt
| do stmt while(bool);
| break;
| block
loc -> loc [bool] | id
表示式的產生式處理了運算子的結合性和優先順序。他們對每個優先順序級別都使用了乙個非終結符號,而非終結符號factor用來表示括號中的表示式,識別符號,陣列引用和常量。
bool –> bool ||join | join
join –> join && equality |equality
equality –> equality == rel | equality != rel | rel
rel -> expr < expr | expr <= expr |expr >= expr | expr > expr | expr
expr –> expr + term | expr - term | term
term –> term * unary | term / unary | unary
unary –> !unary | –unary | factor
factor –> ( bool ) | loc | num | real | true | false
乙個手寫語法制導編譯器前端
是指從源程式到中間 這一部分 之後開始涉及適應硬體的部分。當然,要做ide的話還要涉及執行時環境。本科課程設計主要是前端。從原始檔到詞法單元 token 也就是tokenizer。也就是parser。考慮選擇自頂向下的ll,還是自底向上分析的lr。從分析能力上看是這樣的。ll不能解決左遞迴,能勉強搞...
乙個編譯器的小陷阱
有時候在乙個平台執行正確的程式,在另乙個平台就會出問題。在平台移植中,最常見的問題可能就是位元組序和對齊這類問題了。本文記錄的是我以前碰到過的乙個小陷阱。看看這段 的輸出應該是什麼?include stdio.h char do something int p void test1 void int...
《自己手動寫乙個編譯器 聯結器》一(1)
這次主要是記錄一些關於字母表,和文法的形式定義 基礎部分 字母表 這個字母表其實囊括了我們的符號和符號串的概念,大可以認為這兩個就是字母表的子集吧 對於字母表的分析要從兩個方面來看 詞法分析方面 從詞法分析來看我們的字母表其實就是原始碼字元 那麼對應的有符號和符號串的概念,其實 這個時候的符號就是這...