Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecsgen.rb

    • Property svn:mime-type changed from text/x-ruby to text/x-ruby;charset=UTF-8
    r270 r321  
    77#   Copyright (C) 2008-2016 by TOPPERS Project
    88#--
    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 è²¬ã™ã‚‹ã“と.
     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#       免責すること.
    4531
    46 #   æœ¬ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ï¼Œç„¡ä¿è¨¼ã§æä¾›ã•ã‚Œã¦ã„るものである.上記著作権è€
    47 ãŠ
    48 #   ã‚ˆã³TOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    49 #   ã«å¯¾ã™ã‚‹é©åˆæ€§ã‚‚含めて,いかなる保証も行わない.また,本ソフトウェ
    50 #   ã‚¢ã®åˆ©ç”¨ã«ã‚ˆã‚Šç›´æŽ¥çš„または間接的に生じたいかなる損害に関しても,そ
    51 #   ã®è²¬ä»»ã‚’負わない.
     32#   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33#   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34#   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35#   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36#   の責任を負わない.
    5237
    53 #   $Id: tecsgen.rb 1011 2016-07-11 02:20:01Z coas-nagasima $
     38#   $Id$
    5439#++
    5540
    56 #= tecsgen  : TECS のジェネレータ
     41#= tecsgen  : TECS のジェネレータ
    5742#
    58 #Authors::    石川 拓也(HRP2Plugin)
    59 #Authors::    原  拓(動的結合仕様)
    60 #Authors::    河田 智明(NotifierPlugin)
    61 #Authors::    高田 広章(ASP3 への TECS 組込み)
    62 #Authors::    高木 信尚(ランタイムヘッダ)
    63 #Authors::    成瀬 有美(TECS flow 実è£
    64 )
    65 #Authors::    鵜飼 敬幸(ATK1Plugin)
    66 #Authors::    大山 博司(ジェネレータ実è£
    67 , RPCPlugin, TracePlugin, MrubyBridgePlugin)
    68 #Authors::    山本 将也(ジェネレータ初期プロトタイプ実è£
    69 )
    70 #Authors::    小南 靖雄(テストコードの一部)
    71 #Authors::    安積 卓也(ASP+TECS, EV3RT+TECS, mruby on TECS等実è£
    72 )
     43#Authors::    石川 拓也(HRP2Plugin)
     44#Authors::    原  拓(動的結合仕様)
     45#Authors::    河田 智明(NotifierPlugin)
     46#Authors::    高田 広章(ASP3 への TECS 組込み)
     47#Authors::    高木 信尚(ランタイムヘッダ)
     48#Authors::    成瀬 有美(TECS flow 実装)
     49#Authors::    鵜飼 敬幸(ATK1Plugin)
     50#Authors::    大山 博司(ジェネレータ実装, RPCPlugin, TracePlugin, MrubyBridgePlugin)
     51#Authors::    山本 将也(ジェネレータ初期プロトタイプ実装)
     52#Authors::    小南 靖雄(テストコードの一部)
     53#Authors::    安積 卓也(ASP+TECS, EV3RT+TECS, mruby on TECS等実装)
    7354#  Authors list is in i-ro-ha order.
    7455#Version::   see version.rb
     
    8162
    8263###
    83 #= Array  initializer の '{', '}' で囲まれた場合
    84 # mikan AggregateInitializer など、クラスを変更すべきである
     64#= Array  initializer の '{', '}' で囲まれた場合
     65# mikan AggregateInitializer など、クラスを変更すべきである
    8566class Array
    86   #=== CDL の文字列を生成する
     67  #=== CDL の文字列を生成する
    8768  def to_CDL_str
    8869    str = '{ '
     
    10586end
    10687
    107 #=== RUBY ライブラリをロードする
     88#=== RUBY ライブラリをロードする
    10889#
    109 # -L, $RUBYLIB, システム(/usr/lib/rub..など) の順にサーチが行われる
    110 # exerb 対応のため、上記パスにファイルが見つからない場合 require を実行してみる
     90# -L, $RUBYLIB, システム(/usr/lib/rub..など) の順にサーチが行われる
     91# exerb 対応のため、上記パスにファイルが見つからない場合 require を実行してみる
    11192#
    112 # プラグインの場合は b_fatal = false を指定。ファイルがなくてもエラー出力後、処理続行
    113 # b_fatal = false の場合 tecslib/core がサーチパスに追加される
    114 #RETURN::Bool   : true=成功、 false=失敗   å¤±æ•—した場合、Generator.error は呼びå
    115 ƒã§å‡ºåŠ›ã™ã‚‹
     93# プラグインの場合は b_fatal = false を指定。ファイルがなくてもエラー出力後、処理続行
     94# b_fatal = false の場合 tecslib/core がサーチパスに追加される
     95#RETURN::Bool   : true=成功、 false=失敗   失敗した場合、Generator.error は呼び元で出力する
    11696def require_tecsgen_lib( fname, b_fatal = true )
    11797  dbgPrint( "require_lib: #{fname}\n")
     
    121101    b_exception = false
    122102
    123     # -L 、 $RUBYLIB で指定されたパスおよびシステムのパスからサーチ
    124     #   exerb では $LOAD_PATH は ["."] のみå
    125 ¥ã£ã¦ã„るようだ
     103    # -L 、 $RUBYLIB で指定されたパスおよびシステムのパスからサーチ
     104    #   exerb では $LOAD_PATH は ["."] のみ入っているようだ
    126105    ($library_path+$LOAD_PATH).each{ |path|
    127106      [ "", "tecslib/plugin/" ].each { |lp|
    128107        lib = File.expand_path( path ) + '/' + lp + fname
    129108       
    130         if File.exist? lib then  # ファイル存否と他のエラーを区別するため存在確認をする
     109        if File.exist? lib then  # ファイル存否と他のエラーを区別するため存在確認をする
    131110          begin
    132111            require( lib )
     
    145124
    146125    if b_require == false && b_exception == false then
    147       # exerb 対応 "." をサーチパスの最初に加える
    148       #   "tecslib/" は RPCPlugin.rb, TracePlugin.rb のために用意してある
    149       #   RPCPlugin.rb, TracePlugin.rb が tecslib 下でなければ不要になるが、このようにしておく
     126      # exerb 対応 "." をサーチパスの最初に加える
     127      #   "tecslib/" は RPCPlugin.rb, TracePlugin.rb のために用意してある
     128      #   RPCPlugin.rb, TracePlugin.rb が tecslib 下でなければ不要になるが、このようにしておく
    150129      ["","tecslib/plugin/"].each{ |lp|
    151130        path = lp + fname
     
    155134        rescue LoadError => e
    156135          # p "LoadError to load #{fname}"
    157           # 2015.12.18 exerb 版でプラグインのロードでエラーが出るので、無視する. おそらく昔からエラーは出ていた
     136          # 2015.12.18 exerb 版でプラグインのロードでエラーが出るので、無視する. おそらく昔からエラーは出ていた
    158137          # print_exception( e )
    159138        rescue Exception => e
    160139          b_exception = true
    161           # 文法エラーなどが発生
     140          # 文法エラーなどが発生
    162141          print_exception( e )
    163142          break
     
    167146
    168147    if b_require == false then
    169       # 見つからなかった
     148      # 見つからなかった
    170149      if b_exception == false then
    171150        STDERR << "tecsgen: Fail to load #{fname}. Check $RUBYLIB environment variable or -L option\n"
    172151      end
    173       # tecsgen を構成するファイルの場合は中止する
     152      # tecsgen を構成するファイルの場合は中止する
    174153      if b_fatal then
    175154        STDERR << "tecsgen: Exit because of unrecoverble error\n"
     
    180159    return true
    181160  ensure
    182     # $KCODE を CDL の文字コードに戻しておく
     161    # $KCODE を CDL の文字コードに戻しておく
    183162    set_kcode $KCODE_CDL
    184163  end
    185164end
    186165
    187 #=== 例外の表示
     166#=== 例外の表示
    188167#evar:: Exception
    189168def print_exception( evar )
    190 # もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
     169# もしスタックトレースが出るまでい時間がかかるようならば、次をコメントアウトしてみるべし
    191170  print "*** Begin Ruby exception message ***\n"
    192171  puts( evar.to_s )
     
    211190end
    212191
    213 #=== エラーおよび警告のレポート
     192#=== エラーおよび警告のレポート
    214193def print_report
    215194  msg = nil
     
    229208end
    230209
    231 #=== $KCODE を設定
     210#=== $KCODE を設定
    232211def set_kcode kcode
    233212  if ! $b_no_kcode then
     
    299278    # include RUNIT::Assert
    300279
    301     ### グローバル変数定義 ###
    302 
    303     # コマンドライン引数  (Makefile.templ へ出力)
     280    ### グローバル変数定義 ###
     281
     282    # コマンドライン引数  (Makefile.templ へ出力)
    304283    $arguments = ""
    305284    ARGV.each { |a| $arguments += " " + a }
     
    325304    $ram_initializer = false # bool: generate ram initializer
    326305    $region_list = {}      #string array : region path which is generated
    327     $generating_region = nil # Region:  Region to optimisze & generate code   # コマンドラインオプションではない
    328                  #           Cell#is_generate? にて参ç
    329 §ã•ã‚Œã‚‹
     306    $generating_region = nil # Region:  Region to optimisze & generate code   # コマンドラインオプションではない
     307                 #           Cell#is_generate? にて参照される
    330308    $unit_test = false     # bool:   unit test verification
    331309    $kcode     = nil       # nil | String: Kanji code type "euc"|"sjis"|"none"|"utf8"
     
    333311    $no_banner = false     # bool:   not print banner
    334312    $print_version = false # bool:   print version
    335     $target    = "tecs"    # String: target name, ARGV[0] から再設定する("tecs" は仮のターゲット)
     313    $target    = "tecs"    # String: target name, ARGV[0] から再設定する("tecs" は仮のターゲット)
    336314    $no_default_import_path = false  # bool: no default import path
    337315    $c_suffix  = "c"       # suffix for C progorams (for C++ source)
     
    362340    end
    363341
    364     # # 文字コードの設定
     342    # # 文字コードの設定
    365343    if $IN_EXERB then
    366       # KCODE_CDL, $KCONV_CDL を仮に設定する (tecs_lang.rb ですぐに再設定される)
     344      # KCODE_CDL, $KCONV_CDL を仮に設定する (tecs_lang.rb ですぐに再設定される)
    367345      $KCODE_CDL = "SJIS"          # string: "EUC" | "SJIS" | "NONE" | "UTF8"
    368       $KCONV_CDL = Kconv::SJIS     # const: NONE には ASCII を対応させる
     346      $KCONV_CDL = Kconv::SJIS     # const: NONE には ASCII を対応させる
    369347    else
    370348      $KCODE_CDL = "EUC"           # string: "EUC" | "SJIS" | "NONE" | "UTF8"
    371       $KCONV_CDL = Kconv::EUC      # const: NONE には ASCII を対応させる
    372     end
    373     # $KCODE_TECSGEN, $KCONV_TECSGEN を仮に設定する (tecs_lang.rb ですぐに再設定される)
    374     $KCODE_TECSGEN = "UTF8"      # string: "EUC"  このファイルの文字コード(オプションではなく定数)
     349      $KCONV_CDL = Kconv::EUC      # const: NONE には ASCII を対応させる
     350    end
     351    # $KCODE_TECSGEN, $KCONV_TECSGEN を仮に設定する (tecs_lang.rb ですぐに再設定される)
     352    $KCODE_TECSGEN = "UTF8"      # string: "EUC"  このファイルの文字コード(オプションではなく定数)
    375353    $KCONV_TECSGEN = Kconv::UTF8 # const:
    376     set_kcode( $KCODE_TECSGEN )  # このファイルの文字コードを設定
     354    set_kcode( $KCODE_TECSGEN )  # このファイルの文字コードを設定
    377355
    378356  end # initialize_global_var
     
    380358  def self.analyze_option( additional_option_parser )
    381359
    382     ###  tecsgen コマンドオプション解析  ###
     360    ###  tecsgen コマンドオプション解析  ###
    383361    ARGV.options {|parser|
    384362      parser.banner = "Usage: tecsgen [options] files"
     
    428406        $kcode = code
    429407      }
    430       #  old_mode は V1.0.C.22 で廃止
     408      #  old_mode は V1.0.C.22 で廃止
    431409      #  parser.on('-o', '--old-mode',    'old mode' ){
    432410      #    $old_mode = true
     
    497475
    498476  def self.load_modules
    499     ### tecsgen モジュールのロード ####
    500     # -L でパス指定可能としたため、ここからロードを開始する
    501 
    502     #  tecsgen バージョンファイルのロード
    503     # これを実行するまで tecsgen のバージョンを表示できない
    504     # このファイルを誤って読み込むと、異なるバージョン名を表示してしまう
     477    ### tecsgen モジュールのロード ####
     478    # -L でパス指定可能としたため、ここからロードを開始する
     479
     480    #  tecsgen バージョンファイルのロード
     481    # これを実行するまで tecsgen のバージョンを表示できない
     482    # このファイルを誤って読み込むと、異なるバージョン名を表示してしまう
    505483    require_tecsgen_lib 'tecslib/version.rb'
    506484    if ! $no_banner || $print_version
     
    514492    end
    515493
    516     # 文字コード決定のため最初に読みこむ
     494    # 文字コード決定のため最初に読みこむ
    517495    require_tecsgen_lib 'tecslib/core/tecs_lang.rb'
    518496
     
    523501    end
    524502
    525     # syntaxobj.rb には Node が定義されているので、早い段階で require
     503    # syntaxobj.rb には Node が定義されているので、早い段階で require
    526504    require_tecsgen_lib 'tecslib/core/syntaxobj.rb'
    527505    require_tecsgen_lib 'tecslib/core/pluginModule.rb'
     
    543521    require_tecsgen_lib 'tecslib/plugin/DomainPlugin.rb'
    544522
    545     # C 言語パーサ
     523    # C 言語パーサ
    546524    require_tecsgen_lib 'tecslib/core/C_parser.tab.rb'
    547525    require_tecsgen_lib 'tecslib/core/ctypes.rb'
     
    554532
    555533  def self.setup
    556     # $import_path, $tecspath を調整
     534    # $import_path, $tecspath を調整
    557535    TECSGEN.adjust_exerb_path
    558536
    559     # $import_path に環境変数 $TECSGEN およびその直下を追加
     537    # $import_path に環境変数 $TECSGEN およびその直下を追加
    560538    if $no_default_import_path == false then
    561       # $TECSGEN および、その直下のディレクトリをパスに追加
     539      # $TECSGEN および、その直下のディレクトリをパスに追加
    562540      if $tecspath != "." then
    563541        TECSGEN.add_import_path $tecspath
     
    570548          }
    571549        rescue
    572           # 無視
     550          # 無視
    573551        end
    574552      end
    575553    end
    576554
    577     # デフォルト設定
     555    # デフォルト設定
    578556    TECSGEN.set_default_config
    579557
    580     # $target の設定
     558    # $target の設定
    581559    $target = ARGV[0]
    582560    pos = $target.rindex( /[:\\\/]/ )
    583561    if pos then
    584       $target = $target[pos+1..-1]  # ディレクトリ区切りを除いた文字列
     562      $target = $target[pos+1..-1]  # ディレクトリ区切りを除いた文字列
    585563    end
    586564    pos = $target.rindex( /\./ )
    587565    if pos then
    588       $target = $target[0..pos-1]   # 拡張子を取り除いた文字列
    589     end
    590 
    591     # gen ディレクトリの作成
     566      $target = $target[0..pos-1]   # 拡張子を取り除いた文字列
     567    end
     568
     569    # gen ディレクトリの作成
    592570    begin
    593571      if ! File.directory?( $gen_base ) then
     
    615593end # TECSGEN
    616594
    617 # 複数のジェネレータインスタンスを生成することは、可能だが、以下の問題がある
    618 #  クラス変数のリセットを確実に行うå¿
    619 è¦ãŒã‚ã‚‹
     595# 複数のジェネレータインスタンスを生成することは、可能だが、以下の問題がある
     596#  クラス変数のリセットを確実に行う必要がある
    620597
    621598if $TECSCDE != true then
Note: See TracChangeset for help on using the changeset viewer.