編譯原理(7) 多維陣列賦值

2021-10-10 16:04:31 字數 2178 閱讀 3051

注:

課程:《編譯技術》上機

實驗一:詞法語法分析器的設計與實現,生成抽象語法樹。

建議使用詞法語法分析程式生成工具如:lex/flex , yacc/bison等專業工具完成。

此處完成補充 多維陣列賦值 的操作

另外:希望大噶支援下我滴個人部落格**:www.xyzsh.cn

前期準備

已經將整個資料夾都備好份,以供魔改後的回溯

開始實驗

第一步修改parser.y檔案(parser.y是c語言文法)

第138行修改exp語法

注意:將arraylist改為了arraylistn

第41行補充優先順序lcomma定義

第140-143行插入arraylistn的文法

第一行文法通過迭代達到可以匹配多個維度的賦值的目的,可以模擬,,},匹配的是最外層大括號包括的全部內容

第三行匹配的是一維陣列的賦值內容

%prec lcomma圈起來,重點要考。自己想一下為什麼要加這個,如果不加後果會怎樣,加別的符號行不行

第144-145行插入arraylist1的文法

第26行補充定義非終結符名

第38行補充定義狀態名array_1 array_n

補充定義array_1 array_n

第二步修改ast.c檔案(ast.c定義了樹的生成與輸出)

在第155-157行插入array_n的輸出

感覺大家應該都懂了,就不解釋了

在第158-159行插入array_1的輸出

問:為什麼沒有printf()?

補:解釋一下 printf("% * cchar:%c\n",indent,』 ',t->type_char);的含義:先列印indent個空格,再列印char:%c

預設低一級的話,往後移3個空格

第三步修改test.c檔案(測試**)

第15行是測試多維陣列區域性變數聲名時賦值

第44行是測試多維維陣列賦值

結果檢驗

依次執行

發現有亂碼,使用chcp 65001切換到utf-8編碼介面

多維陣列的賦值輸出完成!

一維陣列區域性變數宣告時賦值也可以輸出!

這一步是我花時間最多的步驟了,可能你看教程步數並沒有感覺出來,但是他確實很難,每一步都會出很多bug...累癱

寫在結尾

希望以上可以幫到你!

如有錯誤,或不同想法,歡迎指出,互相學習共同進步!

給多維陣列物件賦值

var messagetable new function var messageinfo function passparm messageinfo messagetable messageinfo i messageid message messageinfo i message message...

Python的多維空陣列賦值方法

python裡面的list tuple預設都是一維的。建立二維陣列或者多維陣列也是比較簡單。可以這樣 list1 1,2,bkmzfhxhdt list1.append 3,4,可以這樣 list2 1,2,3,4,還可以這樣 list3 1,2 list3.insert 2,3,4 比較特殊的情況...

PHP7陣列底層原理

php底層是由hashtable bucket實現 hashtable typedef struct hashtable bucket typedef struct bucketbucket 二 儲存過程 通過hash函式對key做hash,算出在中間表的下標,資料順序的儲存在bucket陣列 鍊錶...