Changeset 318 for asp3_gr_sakura/trunk/cfg/pass1.rb
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/cfg/pass1.rb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 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 126 2016-05-03 06:53:08Z ertl-hiro $ 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 … … 187 171 { skip_blanks: true, skip_lines: /^#/ }) 188 172 symvalCsv.each do |record| 189 # å¤æ°å173 # 変数名 190 174 if record[0].nil? 191 175 error_exit("invalid variable name in " \ … … 196 180 variable = record[0] 197 181 198 # å¼182 # 式 199 183 if record[1].nil? || record[1].empty? 200 184 symbol[:EXPR] = variable … … 203 187 end 204 188 205 # å¼ã®å189 # 式の型 206 190 if !record[2].nil? && !record[2].empty? 207 191 case record[2] 208 when /^[bB]/ # çå½å¤192 when /^[bB]/ # 真偽値 209 193 symbol[:BOOL] = true 210 when /^[uU]/ # 符å·ç¡ãæ´æ°å¤211 # ä½ãè¨å®ããªã212 else # 符å·ä»ãæ´æ°å¤194 when /^[uU]/ # 符号無し整数値 195 # 何も設定しない 196 else # 符号付き整数値 213 197 symbol[:SIGNED] = true 214 198 end 215 199 end 216 200 217 # ã³ã³ãã¤ã«æ¡ä»¶201 # コンパイル条件 218 202 if !record[3].nil? && !record[3].empty? 219 203 symbol[:CONDITION] = record[3] 220 204 end 221 205 222 # æ¡ä»¶ãæç«ããªãæã®å¼206 # 条件が成立しない時の式 223 207 if !record[4].nil? && !record[4].empty? 224 208 symbol[:ELSE_EXPR] = record[4] … … 232 216 233 217 # 234 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ããã®èªã¿è¾¼ã¿ã¯ã©ã¹218 # システムコンフィギュレーションファイルからの読み込みクラス 235 219 # 236 220 class ConfigFile … … 254 238 return(nil) if line.nil? 255 239 256 line.encode!("UTF-16BE", "UTF-8", # ä¸æ£ãªãã¤ãåãé¤å¤ãã240 line.encode!("UTF-16BE", "UTF-8", # 不正なバイト列を除外する 257 241 :invalid => :replace, 258 242 :undef => :replace, … … 263 247 if @withinComment 264 248 case line 265 when /\*\// # C è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãçµäº266 line.sub!(/^.*?\*\//, "") # æåã®*/ã«ãããããã*/249 when /\*\// # C言語スタイルのコメント終了 250 line.sub!(/^.*?\*\//, "") # 最初の*/にマッチさせる */ 267 251 @withinComment = false 268 252 else … … 271 255 end 272 256 if !@withinComment 273 line.gsub!(/\/\*.*?\*\//, "") # C è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãã®é¤å»274 # æåã®*/ã«ãããããã*/257 line.gsub!(/\/\*.*?\*\//, "") # C言語スタイルのコメントの除去 258 # 最初の*/にマッチさせる */ 275 259 case line 276 when /^\s*#/ # ããªããã»ããµãã£ã¬ã¯ãã£ã260 when /^\s*#/ # プリプロセッサディレクティブ 277 261 if withinApi 278 262 parse_error(self, \ … … 280 264 line = "" 281 265 end 282 when /\/\*/ # C è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ãéå§266 when /\/\*/ # C言語スタイルのコメント開始 283 267 line.sub!(/\/\*.*$/, "") 284 268 @withinComment = true 285 when /\/\// # C++ è¨èªã¹ã¿ã¤ã«ã®ã³ã¡ã³ã269 when /\/\// # C++言語スタイルのコメント 286 270 line.sub!(/\/\/.*$/, "") 287 271 end … … 300 284 301 285 # 302 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®ãã¼ãµã¼ã¯ã©ã¹286 # システムコンフィギュレーションファイルのパーサークラス 303 287 # 304 288 class CfgParser … … 310 294 def initialize 311 295 @line = "" 312 @skipComma = false # 次ã,ã§ããã°èªã¿é£ã°ã313 end 314 315 # 316 # æååæ«ã¾ã§èªã296 @skipComma = false # 次が,であれば読み飛ばす 297 end 298 299 # 300 # 文字列末まで読む 317 301 # 318 302 def parseString(cfgFile) … … 320 304 begin 321 305 case @line 322 when /^([^"]*\\\\)(.*)$/ # \\ ã¾ã§èªã306 when /^([^"]*\\\\)(.*)$/ # \\まで読む 323 307 string += $1 324 308 @line = $2 325 when /^([^"]*\\\")(.*)$/ # \" ã¾ã§èªã309 when /^([^"]*\\\")(.*)$/ # \"まで読む 326 310 string += $1 327 311 @line = $2 328 when /^([^"]*\")(.*)$/ # " ã¾ã§èªã312 when /^([^"]*\")(.*)$/ # "まで読む 329 313 string += $1 330 314 @line = $2 331 315 return(string) 332 else # è¡æ«ã¾ã§èªã316 else # 行末まで読む 333 317 string += @line + "\n" 334 318 @line = cfgFile.getNextLine(true) … … 340 324 341 325 # 342 # æåæ«ã¾ã§èªã326 # 文字末まで読む 343 327 # 344 328 def parseChar(cfgFile) … … 346 330 begin 347 331 case @line 348 when /^([^']*\\\\)(.*)$/ # \\ ã¾ã§èªã332 when /^([^']*\\\\)(.*)$/ # \\まで読む 349 333 string += $1 350 334 @line = $2 351 when /^([^']*\\\')(.*)$/ # \' ã¾ã§èªã335 when /^([^']*\\\')(.*)$/ # \'まで読む 352 336 string += $1 353 337 @line = $2 354 when /^([^']*\')(.*)$/ # ' ã¾ã§èªã338 when /^([^']*\')(.*)$/ # 'まで読む 355 339 string += $1 356 340 @line = $2 357 341 return(string) 358 else # è¡æ«ã¾ã§èªã342 else # 行末まで読む 359 343 string += @line + "\n" 360 344 @line = cfgFile.getNextLine(true) … … 366 350 367 351 # 368 # æ¹è¡ã¨ç©ºç½æåãèªã¿é£ã°ã352 # 改行と空白文字を読み飛ばす 369 353 # 370 354 def skipSpace(cfgFile, withinApi) 371 355 loop do 372 return if @line.nil? # ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³ 373 @line.lstrip! # å 374 é ã®ç©ºç½ãåé¤ 375 return if @line != "" # 空è¡ã§ãªããã°ãªã¿ã¼ã³ 376 @line = cfgFile.getNextLine(withinApi) # 次ã®è¡ãèªã 377 end 378 end 379 380 # 381 # 次ã®æåã¾ã§èªã¿é£ã°ã 356 return if @line.nil? # ファイル末であればリターン 357 @line.lstrip! # 先頭の空白を削除 358 return if @line != "" # 空行でなければリターン 359 @line = cfgFile.getNextLine(withinApi) # 次の行を読む 360 end 361 end 362 363 # 364 # 次の文字まで読み飛ばす 382 365 # 383 366 def skipToToken(cfgFile, withinApi=true) 384 367 skipSpace(cfgFile, withinApi) 385 if @line.nil? # ãã¡ã¤ã«æ«ã§ããã°ã¨ã©ã¼çµäº368 if @line.nil? # ファイル末であればエラー終了 386 369 error_exit("unexpexced end-of-file") 387 370 end … … 389 372 390 373 # 391 # ãã©ã¡ã¼ã¿ã1ã¤èªã 392 # 393 # @lineã®å 394 é ãããã©ã¡ã¼ã¿ã1ã¤èªãã§ï¼ãããæååã§è¿ãï¼èªãã ã 395 # ã©ã¡ã¼ã¿ã¯ï¼@lineããã¯åé¤ããï¼ãã©ã¡ã¼ã¿ã®éä¸ã§è¡æ«ã«éããæã¯ï¼ 396 # cfgFileãã次ã®è¡ãåãåºãï¼ãã¡ã¤ã«æ«ã«éããæã¯ï¼nilãè¿ãï¼ 374 # パラメータを1つ読む 375 # 376 # @lineの先頭からパラメータを1つ読んで,それを文字列で返す.読んだパ 377 # ラメータは,@lineからは削除する.パラメータの途中で行末に達した時は, 378 # cfgFileから次の行を取り出す.ファイル末に達した時は,nilを返す. 397 379 # 398 380 def parseParam(cfgFile) 399 param = "" # èªãã æåå400 parenLevel = 0 # æ¬å¼§ã®ãã¹ãã¬ãã«381 param = "" # 読んだ文字列 382 parenLevel = 0 # 括弧のネストレベル 401 383 skipComma = @skipComma 402 384 @skipComma = false 403 385 404 skipToToken(cfgFile) # 次ã®æåã¾ã§èªã¿é£ã°ã386 skipToToken(cfgFile) # 次の文字まで読み飛ばす 405 387 begin 406 388 if parenLevel == 0 … … 410 392 if param == "" && skipComma 411 393 skipComma = false 412 return(parseParam(cfgFile)) # å帰å¼ã³åºã394 return(parseParam(cfgFile)) # 再帰呼び出し 413 395 else 414 396 return(param.strip) … … 425 407 @line = $2 426 408 parenLevel += 1 427 when /^(\s*([)}]))(.*)$/ # } ã)409 when /^(\s*([)}]))(.*)$/ # }か) 428 410 if param != "" 429 411 return(param.strip) … … 439 421 @line = $2 440 422 param += $1 + parseChar(cfgFile) 441 when /^(\s*[^,{}()"'\s]+)(.*)$/ # ãã®ä»ã®æåå423 when /^(\s*[^,{}()"'\s]+)(.*)$/ # その他の文字列 442 424 param += $1 443 425 @line = $2 444 else # è¡æ«426 else # 行末 445 427 param += " " 446 428 @line = cfgFile.getNextLine(true) 447 429 end 448 430 else 449 # æ¬å¼§å 450 ã®å¦ç 431 # 括弧内の処理 451 432 case @line 452 433 when /^(\s*\()(.*)$/ # "(" … … 464 445 @line = $2 465 446 param += $1 + parseChar(cfgFile) 466 when /^(\s*[^()"'\s]+)(.*)$/ # ãã®ä»ã®æåå447 when /^(\s*[^()"'\s]+)(.*)$/ # その他の文字列 467 448 param += $1 468 449 @line = $2 469 else # è¡æ«450 else # 行末 470 451 param += " " 471 452 @line = cfgFile.getNextLine(true) … … 499 480 500 481 def parseApi(cfgFile, apiName) 501 # éçAPIã®èªã¿è¾¼ã¿482 # 静的APIの読み込み 502 483 staticApi = {} 503 484 tooFewParams = false 504 485 skipUntilBrace = 0 505 486 506 skipToToken(cfgFile) # 次ã®æåã¾ã§èªã¿é£ã°ã487 skipToToken(cfgFile) # 次の文字まで読み飛ばす 507 488 if (/^\((.*)$/ =~ @line) 508 489 @line = $1 … … 515 496 516 497 apiDef[:PARAM].each do |apiParam| 517 return(staticApi) if param.nil? # ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³498 return(staticApi) if param.nil? # ファイル末であればリターン 518 499 519 500 if skipUntilBrace > 0 520 # API å®ç¾©ã}ã¾ã§ã¹ãããä¸501 # API定義を}までスキップ中 521 502 if apiParam.has_key?(:BRACE) 522 503 case apiParam[:BRACE] … … 540 521 staticApi[apiParam[:NAME]].push(getParam(apiParam, param, cfgFile)) 541 522 param = parseParam(cfgFile) 542 break if param.nil? # ãã¡ã¤ã«æ«ã®å ´å523 break if param.nil? # ファイル末の場合 543 524 end 544 525 elsif apiParam.has_key?(:OPTBRACE) 545 526 if param == apiParam[:BRACE] 546 527 param = parseParam(cfgFile) 547 break if param.nil? # ãã¡ã¤ã«æ«ã®å ´å528 break if param.nil? # ファイル末の場合 548 529 else 549 530 if param == "" 550 531 param = parseParam(cfgFile) 551 break if param.nil? # ãã¡ã¤ã«æ«ã®å ´å532 break if param.nil? # ファイル末の場合 552 533 elsif /^([})])$/ !~ param 553 534 parse_error(cfgFile, "`{...}' expected before #{param}") 554 535 end 555 skipUntilBrace += 1 # API å®ç¾©ã}ã¾ã§ã¹ããã536 skipUntilBrace += 1 # API定義を}までスキップ 556 537 end 557 538 elsif !apiParam.has_key?(:BRACE) … … 568 549 else 569 550 parse_error(cfgFile, "`#{apiParam[:BRACE]}' expected before #{param}") 570 # ) ããã¡ã¤ã«æ«ã¾ã§èªã¿é£ã°ã551 # )かファイル末まで読み飛ばす 571 552 loop do 572 553 param = parseParam(cfgFile) … … 577 558 end 578 559 579 # æå¾ 580 ããããã©ã¡ã¼ã¿ããã¹ã¦èªãã å¾ã®å¦ç 560 # 期待されるパラメータをすべて読んだ後の処理 581 561 if param != ")" 582 562 begin 583 563 param = parseParam(cfgFile) 584 return(staticApi) if param.nil? # ãã¡ã¤ã«æ«ã§ããã°ãªã¿ã¼ã³564 return(staticApi) if param.nil? # ファイル末であればリターン 585 565 end while param != ")" 586 566 parse_error(cfgFile, "too many parameters before `)'") … … 594 574 595 575 def parseOpenBrace(cfgFile) 596 # { ã®èªã¿è¾¼ã¿597 skipToToken(cfgFile) # 次ã®æåã¾ã§èªã¿é£ã°ã576 # {の読み込み 577 skipToToken(cfgFile) # 次の文字まで読み飛ばす 598 578 if (/^\{(.*)$/ =~ @line) 599 579 @line = $1 … … 609 589 cfgFile = cfgFiles.last 610 590 611 skipSpace(cfgFile, false) # æ¹è¡ã¨ç©ºç½æåãèªã¿é£ã°ã591 skipSpace(cfgFile, false) # 改行と空白文字を読み飛ばす 612 592 if @line.nil? 613 # ãã¡ã¤ã«æ«ã®å¦ç593 # ファイル末の処理 614 594 cfgFiles.pop.close 615 595 if cfgFiles.empty? 616 break # ãã¼ã¹å¦ççµäº596 break # パース処理終了 617 597 else 618 @line = "" # å 619 ã®ãã¡ã¤ã«ã«æ»ã£ã¦ç¶ãã 598 @line = "" # 元のファイルに戻って続ける 620 599 end 621 600 elsif /^;(.*)$/ =~ @line 622 # ; ã¯èªã¿é£ã°ã601 # ;は読み飛ばす 623 602 @line = $1 624 603 elsif /^#/ =~ @line 625 # ããªããã»ããµãã£ã¬ã¯ãã£ããèªã604 # プリプロセッサディレクティブを読む 626 605 case @line 627 606 when /^#include\b(.*)$/ … … 662 641 if !$domainId.has_key?(domid) 663 642 if $inputObjid.has_key?(domid) 664 # IDçªå·å 665 ¥åãã¡ã¤ã«ã«å®ç¾©ããã¦ããå ´å 643 # ID番号入力ファイルに定義されていた場合 666 644 $domainId[domid] = $inputObjid[domid] 667 645 if $domainId[domid] > 32 … … 690 668 else 691 669 if $apiDefinition.has_key?(apiName) 692 # éçAPIã1ã¤èªã670 # 静的APIを1つ読む 693 671 staticApi = parseApi(cfgFile, apiName) 694 672 if staticApi.empty? 695 # ãã¡ã¤ã«æ«ãææ³ã¨ã©ã¼673 # ファイル末か文法エラー 696 674 elsif (staticApi[:APINAME] == "INCLUDE") 697 # INCLUDE ã®å¦ç675 # INCLUDEの処理 698 676 includeFilePath = SearchFilePath(staticApi[:file]) 699 677 if includeFilePath.nil? … … 704 682 end 705 683 else 706 # éçAPIã®å¦ç684 # 静的APIの処理 707 685 if !@@currentDomain.nil? 708 686 staticApi[:DOMAIN] = @@currentDomain … … 721 699 end 722 700 elsif (/^\}(.*)$/ =~ @line) 723 # } ã®å¦ç701 # }の処理 724 702 if @@nestDC.size > 0 725 703 case @@nestDC.pop … … 742 720 743 721 # 744 # cfg1_out.c ã®çæ722 # cfg1_out.cの生成 745 723 # 746 724 module Cfg1OutC 747 725 # 748 # éçAPIã®ãã¡ã¤ã«åã¨è¡çªå·ã®åºå726 # 静的APIのファイル名と行番号の出力 749 727 # 750 728 def self.OutLineNumber(cfgInfo) … … 753 731 754 732 # 755 # ã¯ã©ã¹è¨è¿°ã®ãã¡ã¤ã«åã¨è¡çªå·ã®åºå733 # クラス記述のファイル名と行番号の出力 756 734 # 757 735 def self.OutClassLineNumber(cfgInfo) … … 760 738 761 739 # 762 # ãã©ã¡ã¼ã¿ã«é¢ããå®ç¾©ã®åºå740 # パラメータに関する定義の出力 763 741 # 764 742 def self.OutParamDef(param, index, apiParam, cfgInfo) … … 774 752 775 753 # 776 # cfg1_out.c ã®çæï¼ã¡ã¤ã³ã®å¦çï¼754 # cfg1_out.cの生成(メインの処理) 777 755 # 778 756 def self.Generate … … 785 763 EOS 786 764 787 # ã¤ã³ã¯ã«ã¼ãããããã¡ã¤ã«765 # インクルードヘッダファイル 788 766 $includeFiles.each do |file| 789 767 @cfg1Out.add("#include #{file}") … … 813 791 EOS 814 792 815 # å¤åå¾ã·ã³ãã«ã®å¦ç793 # 値取得シンボルの処理 816 794 $symbolValueTable.each do |symbolName, symbolData| 817 795 if symbolData.has_key?(:BOOL) || symbolData.has_key?(:SIGNED) … … 836 814 @cfg1Out.add 837 815 838 # ãã¡ã¤ã³IDã®å®ç¾©ã®çæ816 # ドメインIDの定義の生成 839 817 $domainId.each do |domainName, domainVal| 840 818 if domainVal > 0 … … 844 822 @cfg1Out.add 845 823 846 # éçAPIï¼ããªããã»ããµãã£ã¬ã¯ãã£ãã®å¦ç824 # 静的API/プリプロセッサディレクティブの処理 847 825 $cfgFileInfo.each do |cfgInfo| 848 826 if cfgInfo.has_key?(:DIRECTIVE) … … 857 835 next unless apiParam.has_key?(:NAME) 858 836 paramName = apiParam[:NAME] 859 next unless cfgInfo.has_key?(paramName) # ãã©ã¡ã¼ã¿ããªãå ´å837 next unless cfgInfo.has_key?(paramName) # パラメータがない場合 860 838 paramData = cfgInfo[paramName] 861 839 … … 869 847 end 870 848 if cfgInfo.has_key?(:CLASS) 871 # ã¯ã©ã¹IDã®åå¾ã®ããã®å¦ç849 # クラスIDの取得のための処理 872 850 OutClassLineNumber(cfgInfo) 873 851 @cfg1Out.add("const signed_t #{CFG1_PREFIX}valueof_CLASS_" \ … … 881 859 882 860 # 883 # ãã¹1ã®å¦ç861 # パス1の処理 884 862 # 885 863 def Pass1 886 864 # 887 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®865 # タイムスタンプファイルの指定 888 866 # 889 867 $timeStampFileName = CFG1_OUT_TIMESTAMP 890 868 891 869 # 892 # éçAPIãã¼ãã«ã®èªã¿è¾¼ã¿870 # 静的APIテーブルの読み込み 893 871 # 894 872 ReadApiTableFile() 895 873 896 874 # 897 # å¤åå¾ã·ã³ãã«ãã¼ãã«ã®èªã¿è¾¼ã¿875 # 値取得シンボルテーブルの読み込み 898 876 # 899 877 ReadSymvalTable() 900 878 901 879 # 902 # ã·ã¹ãã ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ãã¡ã¤ã«ã®èªã¿è¾¼ã¿880 # システムコンフィギュレーションファイルの読み込み 903 881 # 904 882 $cfgFileInfo = [] … … 909 887 CfgParser.new.parseFile(configFileName) 910 888 end 911 abort if $errorFlag # ã¨ã©ã¼çºçæã¯abortãã912 913 # 914 # ãã¡ã¤ã³IDã®å²å½ã¦å¦ç889 abort if $errorFlag # エラー発生時はabortする 890 891 # 892 # ドメインIDの割当て処理 915 893 # 916 894 nextDomainId = 1 … … 929 907 930 908 # 931 # cfg1_out.c ã®çæ909 # cfg1_out.cの生成 932 910 # 933 911 Cfg1OutC::Generate() 934 912 935 913 # 936 # ä¾åé¢ä¿ã®åºå914 # 依存関係の出力 937 915 # 938 916 if !$dependencyFileName.nil? … … 959 937 960 938 # 961 # ãã¹2ã«å¼ã渡ãæ 962 å ±ããã¡ã¤ã«ã«çæ 939 # パス2に引き渡す情報をファイルに生成 963 940 # 964 941 if $omitOutputDb.nil? -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.