乙個完整的編譯器前端 A 1 源語言

2022-03-21 07:40:54 字數 971 閱讀 5997

這個語言的乙個程式由乙個塊組成,該塊中包含可選的宣告和語句。語法符號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)

這次主要是記錄一些關於字母表,和文法的形式定義 基礎部分 字母表 這個字母表其實囊括了我們的符號和符號串的概念,大可以認為這兩個就是字母表的子集吧 對於字母表的分析要從兩個方面來看 詞法分析方面 從詞法分析來看我們的字母表其實就是原始碼字元 那麼對應的有符號和符號串的概念,其實 這個時候的符號就是這...