Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/cfg/pass1.rb
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/cfg/pass1.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;charset=UTF-8
r270 r321 7 7 # Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 # 9 # ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 # å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 # ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 # è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 # ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 # ã¨ï¼ 28 # (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 # (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 # å ±åãããã¨ï¼ 36 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 # 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 # å 44 責ãããã¨ï¼ 45 # 46 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 # ã®è²¬ä»»ãè² ããªãï¼ 52 # 53 # $Id: pass1.rb 1011 2016-07-11 02:20:01Z coas-nagasima $ 54 # 55 56 # 57 # ãã¹1ã®å¦ç 58 # 59 60 # 61 # å¤åå¾ã·ã³ãã«ãã¼ãã«ã¸ã®åºå®ç»é² 9 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 10 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 11 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 12 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 # スコード中に含まれていること. 15 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 # の無保証規定を掲載すること. 19 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 21 # と. 22 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 23 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 24 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 25 # 報告すること. 26 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 27 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 28 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 29 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 30 # 免責すること. 31 # 32 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 # の責任を負わない. 37 # 38 # $Id$ 39 # 40 41 # 42 # パス1の処理 43 # 44 45 # 46 # 値取得シンボルテーブルへの固定登録 62 47 # 63 48 $symbolValueTable = { … … 80 65 81 66 # 82 # éçAPIãã¼ãã«ã¸ã®åºå®ç»é²67 # 静的APIテーブルへの固定登録 83 68 # 84 69 $apiDefinition = { "INCLUDE" => … … 86 71 87 72 # 88 # éçAPIãã¼ãã«ã®èªã¿è¾¼ã¿73 # 静的APIテーブルの読み込み 89 74 # 90 75 def ReadApiTableFile … … 102 87 apiFile = File.open(apiTableFileName) 103 88 apiFile.each do |line| 104 next if /^#/ =~ line # ã³ã¡ã³ããã¹ããã105 106 fields = line.split(/\s+/) # ãã£ã¼ã«ãã«å解107 108 apiName = fields.shift # API åã®åãåºã89 next if /^#/ =~ line # コメントをスキップ 90 91 fields = line.split(/\s+/) # フィールドに分解 92 93 apiName = fields.shift # API名の取り出し 109 94 if /^(.+)\[(.+)\]$/ =~ apiName 110 95 apiName = $1 … … 127 112 128 113 case prefix 129 when "#" # ãªãã¸ã§ã¯ãèå¥åï¼å®ç¾©ï¼114 when "#" # オブジェクト識別名(定義) 130 115 apiParam[:ID_DEF] = true 131 when "%" # ãªãã¸ã§ã¯ãèå¥åï¼åç 132 §ï¼ 116 when "%" # オブジェクト識別名(参照) 133 117 apiParam[:ID_REF] = true 134 when "." # 符å·ç¡ãæ´æ°å®æ°å¼ãã©ã¡ã¼ã¿118 when "." # 符号無し整数定数式パラメータ 135 119 apiParam[:EXPTYPE] = "unsigned_t" 136 when "+" # 符å·ä»ãæ´æ°å®æ°å¼ãã©ã¡ã¼ã¿120 when "+" # 符号付き整数定数式パラメータ 137 121 apiParam[:EXPTYPE] = "signed_t" 138 122 apiParam[:SIGNED] = true 139 when "&" # ä¸è¬æ´æ°å®æ°å¼ãã©ã¡ã¼ã¿123 when "&" # 一般整数定数式パラメータ 140 124 # do nothing 141 when "$" # æååå®æ°å¼ãã©ã¡ã¼ã¿125 when "$" # 文字列定数式パラメータ 142 126 apiParam[:STRING] = true 143 127 else … … 146 130 147 131 case postfix 148 when "*" # ãã¼ã決ãããã©ã¡ã¼ã¿132 when "*" # キーを決めるパラメータ 149 133 apiDef[:KEYPAR] = name 150 when "?" # ãªãã·ã§ã³ãã©ã¡ã¼ã¿134 when "?" # オプションパラメータ 151 135 apiParam[:OPTIONAL] = true 152 when "\.\.\." # ãªã¹ããã©ã¡ã¼ã¿136 when "\.\.\." # リストパラメータ 153 137 apiParam[:LIST] = true 154 138 end … … 175 159 176 160 # 177 # å¤åå¾ã·ã³ãã«ãã¼ãã«ã®èªã¿è¾¼ã¿161 # 値取得シンボルテーブルの読み込み 178 162 # 179 163 def ReadSymvalTable … … 186 170 symvalCsv = CSV.open(symvalTableFileName) 187 171 symvalCsv.each do |record| 188 # å¤æ°å172 # 変数名 189 173 if record[0].nil? 190 174 error_exit("invalid variable name in `#{fileName}'") … … 194 178 variable = record[0] 195 179 196 # å¼180 # 式 197 181 if record[1].nil? || record[1].empty? 198 182 symbol[:EXPR] = variable … … 201 185 end 202 186 203 # å¼ã®å187 # 式の型 204 188 if !record[2].nil? && !record[2].empty? 205 189 case record[2] 206 when /^[bB]/ # çå½å¤190 when /^[bB]/ # 真偽値 207 191 symbol[:BOOL] = true 208 when /^[uU]/ # 符å·ç¡ãæ´æ°å¤209 # ä½ãè¨å®ããªã210 else # 符å·ä»ãæ´æ°å¤192 when /^[uU]/ # 符号無し整数値 193 # 何も設定しない 194 else # 符号付き整数値 211 195 symbol[:SIGNED] = true 212 196 end 213 197 end 214 198 215 # ã³ã³ãã¤ã«æ¡ä»¶199 # コンパイル条件 216 200 if !record[3].nil? && !record[3].empty? 217 201 symbol[:CONDITION] = record[3] 218 202 end 219 203 220 # æ¡ä»¶ãæç«ããªãæã®å¼204 # 条件が成立しない時の式 221 205 if !record[4].nil? && !record[4].empty? 222 206 symbol[:ELSE_EXPR] = record[4] … … 230 214 231 215 # 232 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ããã®èªã¿è¾¼ã¿ã¯ã©ã¹216 # システムコンフィギュレーションファイルからの読み込みクラス 233 217 # 234 218 class ConfigFile … … 256 240 if @withinComment 257 241 case line 258 when /\*\// # C è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãçµäº259 line.sub!(/^.*?\*\//, "") # æåã®*/ã«ãããããã*/242 when /\*\// # C言語スタイルのコメント終了 243 line.sub!(/^.*?\*\//, "") # 最初の*/にマッチさせる */ 260 244 @withinComment = false 261 245 else … … 264 248 end 265 249 if !@withinComment 266 line.gsub!(/\/\*.*?\*\//, "") # C è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãã®é¤å»267 # æåã®*/ã«ãããããã*/250 line.gsub!(/\/\*.*?\*\//, "") # C言語スタイルのコメントの除去 251 # 最初の*/にマッチさせる */ 268 252 case line 269 when /^\s*#/ # ããªããã»ããµãã£ã¬ã¯ãã£ã253 when /^\s*#/ # プリプロセッサディレクティブ 270 254 if withinApi 271 255 parse_error(self, \ … … 273 257 line = "" 274 258 end 275 when /\/\*/ # C è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãéå§259 when /\/\*/ # C言語スタイルのコメント開始 276 260 line.sub!(/\/\*.*$/, "") 277 261 @withinComment = true 278 when /\/\// # C++ è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ã262 when /\/\// # C++言語スタイルのコメント 279 263 line.sub!(/\/\/.*$/, "") 280 264 end … … 293 277 294 278 # 295 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ãã¼ãµã¼ã¯ã©ã¹279 # システムコンフィギュレーションファイルのパーサークラス 296 280 # 297 281 class CfgParser … … 303 287 def initialize 304 288 @line = "" 305 @skipComma = false # 次ã,ã§ããã°èªã¿é£ã°ã306 end 307 308 # 309 # æååæ«ã¾ã§èªã289 @skipComma = false # 次が,であれば読み飛ばす 290 end 291 292 # 293 # 文字列末まで読む 310 294 # 311 295 def parseString(cfgFile) … … 313 297 begin 314 298 case @line 315 when /^([^"]*\\\\)(.*)$/ # \\ ã¾ã§èªã299 when /^([^"]*\\\\)(.*)$/ # \\まで読む 316 300 string += $1 317 301 @line = $2 318 when /^([^"]*\\\")(.*)$/ # \" ã¾ã§èªã302 when /^([^"]*\\\")(.*)$/ # \"まで読む 319 303 string += $1 320 304 @line = $2 321 when /^([^"]*\")(.*)$/ # " ã¾ã§èªã305 when /^([^"]*\")(.*)$/ # "まで読む 322 306 string += $1 323 307 @line = $2 324 308 return(string) 325 else # è¡æ«ã¾ã§èªã309 else # 行末まで読む 326 310 string += @line + "\n" 327 311 @line = cfgFile.getNextLine(true) … … 333 317 334 318 # 335 # æåæ«ã¾ã§èªã319 # 文字末まで読む 336 320 # 337 321 def parseChar(cfgFile) … … 339 323 begin 340 324 case @line 341 when /^([^']*\\\\)(.*)$/ # \\ ã¾ã§èªã325 when /^([^']*\\\\)(.*)$/ # \\まで読む 342 326 string += $1 343 327 @line = $2 344 when /^([^']*\\\')(.*)$/ # \' ã¾ã§èªã328 when /^([^']*\\\')(.*)$/ # \'まで読む 345 329 string += $1 346 330 @line = $2 347 when /^([^']*\')(.*)$/ # ' ã¾ã§èªã331 when /^([^']*\')(.*)$/ # 'まで読む 348 332 string += $1 349 333 @line = $2 350 334 return(string) 351 else # è¡æ«ã¾ã§èªã335 else # 行末まで読む 352 336 string += @line + "\n" 353 337 @line = cfgFile.getNextLine(true) … … 359 343 360 344 # 361 # æ¹è¡ã¨ç©ºç½æåãèªã¿é£ã°ã345 # 改行と空白文字を読み飛ばす 362 346 # 363 347 def skipSpace(cfgFile, withinApi) 364 348 loop do 365 return if @line.nil? # ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³ 366 @line.lstrip! # å 367 é ã®ç©ºç½ãåé¤ 368 return if @line != "" # 空è¡ã§ãªããã°ãªã¿ã¼ã³ 369 @line = cfgFile.getNextLine(withinApi) # 次ã®è¡ãèªã 370 end 371 end 372 373 # 374 # 次ã®æåã¾ã§èªã¿é£ã°ã 349 return if @line.nil? # ファイル末であればリターン 350 @line.lstrip! # 先頭の空白を削除 351 return if @line != "" # 空行でなければリターン 352 @line = cfgFile.getNextLine(withinApi) # 次の行を読む 353 end 354 end 355 356 # 357 # 次の文字まで読み飛ばす 375 358 # 376 359 def skipToToken(cfgFile, withinApi=true) 377 360 skipSpace(cfgFile, withinApi) 378 if @line.nil? # ãã¡ã¤ã«æ«ã§ããã°ã¨ã©ã¼çµäº361 if @line.nil? # ファイル末であればエラー終了 379 362 error_exit("unexpexced end-of-file") 380 363 end … … 382 365 383 366 # 384 # ãã©ã¡ã¼ã¿ã1ã¤èªã 385 # 386 # @lineã®å 387 é ãããã©ã¡ã¼ã¿ã1ã¤èªãã§ï¼ãããæååã§è¿ãï¼èªãã ã 388 # ã©ã¡ã¼ã¿ã¯ï¼@lineããã¯åé¤ããï¼ãã©ã¡ã¼ã¿ã®éä¸ã§è¡æ«ã«éããæã¯ï¼ 389 # cfgFileãã次ã®è¡ãåãåºãï¼ãã¡ã¤ã«æ«ã«éããæã¯ï¼nilãè¿ãï¼ 367 # パラメータを1つ読む 368 # 369 # @lineの先頭からパラメータを1つ読んで,それを文字列で返す.読んだパ 370 # ラメータは,@lineからは削除する.パラメータの途中で行末に達した時は, 371 # cfgFileから次の行を取り出す.ファイル末に達した時は,nilを返す. 390 372 # 391 373 def parseParam(cfgFile) 392 param = "" # èªãã æåå393 parenLevel = 0 # æ¬å¼§ã®ãã¹ãã¬ãã«374 param = "" # 読んだ文字列 375 parenLevel = 0 # 括弧のネストレベル 394 376 skipComma = @skipComma 395 377 @skipComma = false 396 378 397 skipToToken(cfgFile) # 次ã®æåã¾ã§èªã¿é£ã°ã379 skipToToken(cfgFile) # 次の文字まで読み飛ばす 398 380 begin 399 381 if parenLevel == 0 … … 403 385 if param == "" && skipComma 404 386 skipComma = false 405 return(parseParam(cfgFile)) # å帰å¼ã³åºã387 return(parseParam(cfgFile)) # 再帰呼び出し 406 388 else 407 389 return(param.strip) … … 418 400 @line = $2 419 401 parenLevel += 1 420 when /^(\s*([)}]))(.*)$/ # } ã)402 when /^(\s*([)}]))(.*)$/ # }か) 421 403 if param != "" 422 404 return(param.strip) … … 432 414 @line = $2 433 415 param += $1 + parseChar(cfgFile) 434 when /^(\s*[^,{}()"'\s]+)(.*)$/ # ãã®ä»ã®æåå416 when /^(\s*[^,{}()"'\s]+)(.*)$/ # その他の文字列 435 417 param += $1 436 418 @line = $2 437 else # è¡æ«419 else # 行末 438 420 param += " " 439 421 @line = cfgFile.getNextLine(true) 440 422 end 441 423 else 442 # æ¬å¼§å 443 ã®å¦ç 424 # 括弧内の処理 444 425 case @line 445 426 when /^(\s*\()(.*)$/ # "(" … … 457 438 @line = $2 458 439 param += $1 + parseChar(cfgFile) 459 when /^(\s*[^()"'\s]+)(.*)$/ # ãã®ä»ã®æåå440 when /^(\s*[^()"'\s]+)(.*)$/ # その他の文字列 460 441 param += $1 461 442 @line = $2 462 else # è¡æ«443 else # 行末 463 444 param += " " 464 445 @line = cfgFile.getNextLine(true) … … 492 473 493 474 def parseApi(cfgFile, apiName) 494 # éçAPIã®èªã¿è¾¼ã¿475 # 静的APIの読み込み 495 476 staticApi = {} 496 477 tooFewParams = false 497 478 skipUntilBrace = 0 498 479 499 skipToToken(cfgFile) # 次ã®æåã¾ã§èªã¿é£ã°ã480 skipToToken(cfgFile) # 次の文字まで読み飛ばす 500 481 if (/^\((.*)$/ =~ @line) 501 482 @line = $1 … … 508 489 509 490 apiDef[:PARAM].each do |apiParam| 510 return(staticApi) if param.nil? # ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³491 return(staticApi) if param.nil? # ファイル末であればリターン 511 492 512 493 if skipUntilBrace > 0 513 # API å®ç¾©ã}ã¾ã§ã¹ãããä¸494 # API定義を}までスキップ中 514 495 if apiParam.has_key?(:BRACE) 515 496 case apiParam[:BRACE] … … 533 514 staticApi[apiParam[:NAME]].push(getParam(apiParam, param, cfgFile)) 534 515 param = parseParam(cfgFile) 535 break if param.nil? # ãã¡ã¤ã«æ«ã®å ´å516 break if param.nil? # ファイル末の場合 536 517 end 537 518 elsif apiParam.has_key?(:OPTBRACE) 538 519 if param == apiParam[:BRACE] 539 520 param = parseParam(cfgFile) 540 break if param.nil? # ãã¡ã¤ã«æ«ã®å ´å521 break if param.nil? # ファイル末の場合 541 522 else 542 523 if param == "" 543 524 param = parseParam(cfgFile) 544 break if param.nil? # ãã¡ã¤ã«æ«ã®å ´å525 break if param.nil? # ファイル末の場合 545 526 elsif /^([})])$/ !~ param 546 527 parse_error(cfgFile, "`{...}' expected before #{param}") 547 528 end 548 skipUntilBrace += 1 # API å®ç¾©ã}ã¾ã§ã¹ããã529 skipUntilBrace += 1 # API定義を}までスキップ 549 530 end 550 531 elsif !apiParam.has_key?(:BRACE) … … 561 542 else 562 543 parse_error(cfgFile, "`#{apiParam[:BRACE]}' expected before #{param}") 563 # ) ããã¡ã¤ã«æ«ã¾ã§èªã¿é£ã°ã544 # )かファイル末まで読み飛ばす 564 545 loop do 565 546 param = parseParam(cfgFile) … … 570 551 end 571 552 572 # æå¾ 573 ããããã©ã¡ã¼ã¿ããã¹ã¦èªãã å¾ã®å¦ç 553 # 期待されるパラメータをすべて読んだ後の処理 574 554 if param != ")" 575 555 begin 576 556 param = parseParam(cfgFile) 577 return(staticApi) if param.nil? # ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³557 return(staticApi) if param.nil? # ファイル末であればリターン 578 558 end while param != ")" 579 559 parse_error(cfgFile, "too many parameters before `)'") … … 587 567 588 568 def parseOpenBrace(cfgFile) 589 # { ã®èªã¿è¾¼ã¿590 skipToToken(cfgFile) # 次ã®æåã¾ã§èªã¿é£ã°ã569 # {の読み込み 570 skipToToken(cfgFile) # 次の文字まで読み飛ばす 591 571 if (/^\{(.*)$/ =~ @line) 592 572 @line = $1 … … 602 582 cfgFile = cfgFiles.last 603 583 604 skipSpace(cfgFile, false) # æ¹è¡ã¨ç©ºç½æåãèªã¿é£ã°ã584 skipSpace(cfgFile, false) # 改行と空白文字を読み飛ばす 605 585 if @line.nil? 606 # ãã¡ã¤ã«æ«ã®å¦ç586 # ファイル末の処理 607 587 cfgFiles.pop.close 608 588 if cfgFiles.empty? 609 break # ãã¼ã¹å¦ççµäº589 break # パース処理終了 610 590 else 611 @line = "" # å 612 ã®ãã¡ã¤ã«ã«æ»ã£ã¦ç¶ãã 591 @line = "" # 元のファイルに戻って続ける 613 592 end 614 593 elsif /^;(.*)$/ =~ @line 615 # ; ã¯èªã¿é£ã°ã594 # ;は読み飛ばす 616 595 @line = $1 617 596 elsif /^#/ =~ @line 618 # ããªããã»ããµãã£ã¬ã¯ãã£ããèªã597 # プリプロセッサディレクティブを読む 619 598 case @line 620 599 when /^#include\b(.*)$/ … … 655 634 if !$domainId.has_key?(domid) 656 635 if $inputObjid.has_key?(domid) 657 # IDçªå·å 658 ¥åãã¡ã¤ã«ã«å®ç¾©ããã¦ããå ´å 636 # ID番号入力ファイルに定義されていた場合 659 637 $domainId[domid] = $inputObjid[domid] 660 638 if $domainId[domid] > 32 … … 683 661 else 684 662 if $apiDefinition.has_key?(apiName) 685 # éçAPIã1ã¤èªã663 # 静的APIを1つ読む 686 664 staticApi = parseApi(cfgFile, apiName) 687 665 if staticApi.empty? 688 # ãã¡ã¤ã«æ«ãææ³ã¨ã©ã¼666 # ファイル末か文法エラー 689 667 elsif (staticApi[:APINAME] == "INCLUDE") 690 # INCLUDE ã®å¦ç668 # INCLUDEの処理 691 669 includeFilePath = SearchFilePath(staticApi[:file]) 692 670 if includeFilePath.nil? … … 697 675 end 698 676 else 699 # éçAPIã®å¦ç677 # 静的APIの処理 700 678 if !@@currentDomain.nil? 701 679 staticApi[:DOMAIN] = @@currentDomain … … 714 692 end 715 693 elsif (/^\}(.*)$/ =~ @line) 716 # } ã®å¦ç694 # }の処理 717 695 if @@nestDC.size > 0 718 696 case @@nestDC.pop … … 735 713 736 714 # 737 # cfg1_out.c ã®çæ715 # cfg1_out.cの生成 738 716 # 739 717 module Cfg1OutC 740 718 # 741 # éçAPIã®ãã¡ã¤ã«åã¨è¡çªå·ã®åºå719 # 静的APIのファイル名と行番号の出力 742 720 # 743 721 def self.OutLineNumber(cfgInfo) … … 746 724 747 725 # 748 # ã¯ã©ã¹è¨è¿°ã®ãã¡ã¤ã«åã¨è¡çªå·ã®åºå726 # クラス記述のファイル名と行番号の出力 749 727 # 750 728 def self.OutClassLineNumber(cfgInfo) … … 753 731 754 732 # 755 # ãã©ã¡ã¼ã¿ã«é¢ããå®ç¾©ã®åºå733 # パラメータに関する定義の出力 756 734 # 757 735 def self.OutParamDef(param, index, apiParam, cfgInfo) … … 767 745 768 746 # 769 # cfg1_out.c ã®çæï¼ã¡ã¤ã³ã®å¦çï¼747 # cfg1_out.cの生成(メインの処理) 770 748 # 771 749 def self.Generate … … 778 756 EOS 779 757 780 # ã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«758 # インクルードヘッダファイル 781 759 $includeFiles.each do |file| 782 760 @cfg1Out.add("#include #{file}") … … 800 778 EOS 801 779 802 # å¤åå¾ã·ã³ãã«ã®å¦ç780 # 値取得シンボルの処理 803 781 $symbolValueTable.each do |symbolName, symbolData| 804 782 if symbolData.has_key?(:BOOL) || symbolData.has_key?(:SIGNED) … … 823 801 @cfg1Out.add 824 802 825 # ãã¡ã¤ã³IDã®å®ç¾©ã®çæ803 # ドメインIDの定義の生成 826 804 $domainId.each do |domainName, domainVal| 827 805 if domainVal > 0 … … 831 809 @cfg1Out.add 832 810 833 # éçAPIï¼ããªããã»ããµãã£ã¬ã¯ãã£ãã®å¦ç811 # 静的API/プリプロセッサディレクティブの処理 834 812 $cfgFileInfo.each do |cfgInfo| 835 813 if cfgInfo.has_key?(:DIRECTIVE) … … 844 822 next unless apiParam.has_key?(:NAME) 845 823 paramName = apiParam[:NAME] 846 next unless cfgInfo.has_key?(paramName) # ãã©ã¡ã¼ã¿ããªãå ´å824 next unless cfgInfo.has_key?(paramName) # パラメータがない場合 847 825 paramData = cfgInfo[paramName] 848 826 … … 856 834 end 857 835 if cfgInfo.has_key?(:CLASS) 858 # ã¯ã©ã¹IDã®åå¾ã®ããã®å¦ç836 # クラスIDの取得のための処理 859 837 OutClassLineNumber(cfgInfo) 860 838 @cfg1Out.add("const signed_t #{CFG1_PREFIX}valueof_CLASS_" \ … … 868 846 869 847 # 870 # ãã¹1ã®å¦ç848 # パス1の処理 871 849 # 872 850 def Pass1 873 851 # 874 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®852 # タイムスタンプファイルの指定 875 853 # 876 854 $timeStampFileName = CFG1_OUT_TIMESTAMP 877 855 878 856 # 879 # éçAPIãã¼ãã«ã®èªã¿è¾¼ã¿857 # 静的APIテーブルの読み込み 880 858 # 881 859 ReadApiTableFile() 882 860 883 861 # 884 # å¤åå¾ã·ã³ãã«ãã¼ãã«ã®èªã¿è¾¼ã¿862 # 値取得シンボルテーブルの読み込み 885 863 # 886 864 ReadSymvalTable() 887 865 888 866 # 889 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®èªã¿è¾¼ã¿867 # システムコンフィギュレーションファイルの読み込み 890 868 # 891 869 $cfgFileInfo = [] … … 896 874 CfgParser.new.parseFile(configFileName) 897 875 end 898 abort if $errorFlag # ã¨ã©ã¼çºçæã¯abortãã899 900 # 901 # ãã¡ã¤ã³IDã®å²å½ã¦å¦ç876 abort if $errorFlag # エラー発生時はabortする 877 878 # 879 # ドメインIDの割当て処理 902 880 # 903 881 nextDomainId = 1 … … 916 894 917 895 # 918 # cfg1_out.c ã®çæ896 # cfg1_out.cの生成 919 897 # 920 898 Cfg1OutC::Generate() 921 899 922 900 # 923 # ä¾åé¢ä¿ã®åºå901 # 依存関係の出力 924 902 # 925 903 if !$dependencyFileName.nil? … … 946 924 947 925 # 948 # ãã¹2ã«å¼ã渡ãæ 949 å ±ããã¡ã¤ã«ã«çæ 926 # パス2に引き渡す情報をファイルに生成 950 927 # 951 928 if $omitOutputDb.nil? -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.