CodeGen准备存储库
CodeGen準(zhǔn)備存儲庫
 CodeGen幾乎總是與提供用于生成源文件的元數(shù)據(jù)的存儲庫結(jié)構(gòu)一起使用,并且許多令牌需要使用存儲庫結(jié)構(gòu)。
 基本要求是有一個結(jié)構(gòu)定義,并且該結(jié)構(gòu)定義包含一個或多個字段定義。有些標(biāo)記還要求定義鍵,有些則需要具有結(jié)構(gòu)賦值的文件定義。
 如果還沒有存儲庫,則可以通過將現(xiàn)有的記錄布局文件讀入存儲庫結(jié)構(gòu)來加載所需的大部分信息。
 存儲庫結(jié)構(gòu)限制
 為了成功地與CodeGen一起使用,存儲庫結(jié)構(gòu)必須滿足以下要求。
 ?CodeGen當(dāng)前不支持枚舉、二進(jìn)制和結(jié)構(gòu)字段。
 ?允許覆蓋字段,但通常會被CodeGen忽略。
 ?所有密鑰必須正確定義,以便與適當(dāng)?shù)腎SAM文件完全匹配。
 ?只允許一個標(biāo)簽,且該標(biāo)簽必須是字段均衡值類型。
 ?使用某些令牌需要將正在處理的結(jié)構(gòu)分配給文件定義,而有些則需要定義密鑰。
 ?必須按照正確的順序定義鍵。CodeGen根據(jù)密鑰在存儲庫結(jié)構(gòu)中的定義順序來確定密鑰編號。以正確的順序定義訪問鍵,并在所有訪問鍵定義之后定義外鍵。
 ?如果打算為Synergy以外的語言生成源代碼,則應(yīng)避免給出可能是相關(guān)語言中保留字的字段名稱。
 ?如果希望阻止CodeGen處理結(jié)構(gòu),則可以將文本@NOCODEGEN添加到structures用戶文本字段或長描述中。
 ?要指定結(jié)構(gòu)中的字段是結(jié)構(gòu)“顯示字段”,可以將文本@CODEGEN_display_field添加到字段的用戶文本字符串或長描述中。有關(guān)詳細(xì)信息,請參閱<DISPLAY_FIELD>標(biāo)記。
 數(shù)組字段
 CodeGen支持?jǐn)?shù)組字段,但這些數(shù)組被“展平”為多個非數(shù)組字段。換言之,遇到的每個數(shù)組字段將被多個與數(shù)組字段具有相同數(shù)據(jù)類型和大小的字段替換。
 當(dāng)一個數(shù)組擴展到多個單獨的字段時,每個字段的名稱都會被修改以包含數(shù)組元素定義。例如,字段MYFIELD,A10將展開為兩個單獨的字段,分別名為MYFIELD和MYFIELD。 分組字段
 CodeGen支持組,包括組數(shù)組。當(dāng)由CodeGen處理時,組被“扁平化”。換句話說,組中的字段將成為主結(jié)構(gòu)中的字段,并且組字段將被刪除。
 默認(rèn)情況下,組成員字段名的前綴是父組字段的名稱,后跟一個句點,但可以使用–g f命令行選項覆蓋此行為。例如,如果名為ADDRESS的組包含名為STREET的字段,則CodeGen使用的字段的名稱將為:
 ADDRESS.STREET
 但如果要使用–g f命令行選項,則字段的名稱將為:
 STREET
 顯然,在這種情況下,需要確保名稱與同一結(jié)構(gòu)中的任何其他標(biāo)識符不沖突。
 如果存儲庫組定義包含“成員前綴”“member prefix”,則此前綴將添加到組中每個字段的名稱中,但可以使用–g r命令行選項覆蓋此行為。
 例如,如果一個名為ADDRESS的組包含一個名為STREET的字段,并且group字段定義了成員前綴HOME_,則CodeGen使用的字段的名稱將為:
 ADDRESS.HOME_STREET
 With the –g f command line option the name would be:
 HOME_STREET
 With the –g r command line option the name would be:
 ADDRESS.STREET
 And with the –g f r command line options the name would be:
 STREET
 如果一個組成員字段被聲明為數(shù)組,那么它將被視為前面在數(shù)組字段下討論過的。
 加載Include文件
 在將包含文件中的字段加載到存儲庫結(jié)構(gòu)之前,通常最好先制作包含文件的副本,然后在將其加載到存儲庫結(jié)構(gòu)之前在文件中執(zhí)行一些簡單的“清理”:
 ?存儲庫可以將包含文件中單個記錄(或公共記錄)中的字段加載到存儲庫結(jié)構(gòu)中,因此,如果包含文件定義了多個記錄,則首先確定要加載的記錄。
 ?存儲庫將使用字段定義之后的任何注釋作為字段的說明,因此請清理注釋。如果字段注釋包括位置信息之類的內(nèi)容,那么可能需要刪除它們。請注意,如果這些位置是用特定的可識別字符分隔的(例如,如果它們在括號內(nèi)),則可以在將字段加載到存儲庫中時指定這些字符,因此在這種情況下,不需要手動編輯它們。
 ?存儲庫將加載在要加載的記錄中定義的任何覆蓋,但如果有要保留的覆蓋圖,這些覆蓋被定義為單獨的覆蓋記錄(使用record,X),那么可能需要考慮將這些覆蓋字段移到實際的記錄定義中。
 ?請記住,一般情況下CodeGen會忽略覆蓋字段,因此請檢查所有覆蓋,并確保最希望在生成的代碼中使用的字段是“真實”字段,而不太可能有用的字段是覆蓋字段。例如,如果有日期字段,其中實際字段是單獨的年、月和日,并且有完整的日期覆蓋。在生成代碼時,很可能希望訪問完整的日期,而不是單個字段,因此切換字段和覆蓋可能是最好的選擇。
 ?如果有完整的覆蓋層記錄(一個記錄后跟一個或多個記錄,X’s),那么可能需要將每個覆蓋層加載到單獨的存儲庫結(jié)構(gòu)中。
 清理完include文件后,就可以將該文件加載到新的存儲庫結(jié)構(gòu)中。程序如下:
 ?啟動存儲庫并選擇“修改”>“結(jié)構(gòu)”。
 ?單擊“添加”按鈕(或按“插入”鍵)添加新結(jié)構(gòu)。
 ?提供結(jié)構(gòu)的名稱。通常最好使用原始記錄名作為結(jié)構(gòu)名。
 ?設(shè)置文件類型。大多數(shù)結(jié)構(gòu)應(yīng)設(shè)置為“DBL ISAM”。
 ?對結(jié)構(gòu)進(jìn)行有意義的描述,如“客戶主記錄”。
 ?如果要將結(jié)構(gòu)與數(shù)據(jù)文件中具有多個記錄布局的文件相關(guān)聯(lián),請設(shè)置標(biāo)記以告知存儲庫和其他工具如何檢測文件中的此特定記錄布局。如果不是這樣,請選擇“無”。
 ?單擊“確定”按鈕創(chuàng)建新結(jié)構(gòu)。
 ?單擊屬性按鈕(或按F3鍵)
 ?從菜單中,選擇屬性>字段。
 ?從菜單中,選擇字段功能>加載字段(或按F9)。
 ?輸入包含文件的名稱(或使用文件瀏覽器查找)。
 ?如果包含文件有多個記錄,請輸入要讀取的記錄編號。
 ?如果要從字段說明中刪除信息(例如括號之間的位置),請輸入分隔要刪除的信息的字符。
 ?單擊“確定”按鈕將字段加載到結(jié)構(gòu)中。
 ?按F4鍵退出字段列表。
 ?再次按F4鍵退出結(jié)構(gòu),并保存更改。
 ?繼續(xù)按F4退出存儲庫程序。
總結(jié)
以上是生活随笔為你收集整理的CodeGen准备存储库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: CodeGen按钮循环
 - 下一篇: 如何在TVM上集成Codegen(上)