注:
課程:《編譯技術》上機
實驗一:詞法語法分析器的設計與實現,生成抽象語法樹。
建議使用詞法語法分析程式生成工具如: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陣列 鍊錶...