- Timestamp:
- Jul 3, 2020, 7:19:17 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecslib/core/bnf.y.rb
r321 r429 4 4 # Generator for TOPPERS Embedded Component System 5 5 # 6 # Copyright (C) 2008-201 6by TOPPERS Project6 # Copyright (C) 2008-2018 by TOPPERS Project 7 7 #-- 8 8 # 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ … … 378 378 | STRUCT 379 379 { 380 result = StructType.new() 380 # tag が無い場合、内部名を与える 381 result = StructType.new( :"TAG__#{@@no_struct_tag_num}__" ) 382 @@no_struct_tag_num += 1 381 383 StructType.set_define( true ) 382 384 } … … 709 711 : component_description specified_statement 710 712 | component_description location_information 713 | component_description tool_info 711 714 | 712 715 … … 738 741 | import 739 742 | import_C 740 | signature_plugin743 | generate_statement 741 744 | error # エラー回復ポイント 742 745 … … 797 800 798 801 region_name_list 799 : IDENTIFIER800 { result = [val[0] .val] }801 | region_name_list ',' IDENTIFIER802 { result << val[2] .val}802 : namespace_identifier 803 { result = [val[0]] } 804 | region_name_list ',' namespace_identifier 805 { result << val[2] } 803 806 804 807 const_statement … … 832 835 { Import.new( val[2], true ) } 833 836 834 signature_plugin 837 generate_statement 835 838 # : GENERATE '(' plugin_name ',' namespace_identifier ',' STRING_LITERAL ')' ';' #1ok signature plugin 836 839 : GENERATE '(' plugin_name ',' namespace_identifier ',' plugin_arg ')' ';' #1ok signature plugin … … 1301 1304 result = [ val[0] ] 1302 1305 } 1306 | composite_celltype_statement_specifier_list ',' composite_celltype_statement_specifier 1307 { 1308 Generator.add_statement_specifier val[2] 1309 result = val[0] << val[2] 1310 } 1303 1311 1304 1312 composite_celltype_statement_specifier … … 1350 1358 | internal_join_list specified_join 1351 1359 | internal_join_list external_join 1360 | internal_join_list reverse_join 1352 1361 1353 1362 external_join # cell 内に記述する呼び口の外部結合 … … 1499 1508 1500 1509 1510 # JSON object 1511 tool_info : TOOL_INFO '(' JSON_string ')' JSON_object { TOOL_INFO.new( val[2].to_sym, val[4] ) } 1512 JSON_object : '{' JSON_property_list '}' { result = val[1] } 1513 JSON_property_list : JSON_string ':' JSON_value { result = { val[0].to_sym => val[2] } } 1514 | JSON_property_list ',' JSON_string ':' JSON_value 1515 { val[0][ val[2].to_sym ] = val[4] } 1516 JSON_value : JSON_string | JSON_number | JSON_object | JSON_array 1517 | TRUE { result=val[0].val } | FALSE { result=val[0].val } # JSON_NULL # null not suppoted 1518 JSON_array : '[' JSON_array_list ']' { result = val[1] } 1519 | '[' ']' { result = [] } 1520 JSON_array_list : JSON_value { result = [ val[0] ] } 1521 | JSON_array_list ',' JSON_value { val[0] << val[2] } 1522 JSON_string : STRING_LITERAL { result = val[0].val.gsub!( /\"(.*)\"/, "\\1" ) } 1523 JSON_number : INTEGER_CONSTANT { result = val[0].val.to_i } 1524 | FLOATING_CONSTANT { result = val[0].val.to_f } 1525 | '-' INTEGER_CONSTANT { result = - val[0].val.to_i } 1526 | '-' FLOATING_CONSTANT { result = - val[0].val.to_f } 1527 | '+' INTEGER_CONSTANT { result = val[0].val.to_i } 1528 | '+' FLOATING_CONSTANT { result = val[0].val.to_f } 1529 1530 1501 1531 end 1502 1532 … … 1523 1553 'import_C' => :IMPORT_C, 1524 1554 'generate' => :GENERATE, 1555 '__tool_info__' => :TOOL_INFO, 1525 1556 1526 1557 # types … … 1658 1689 # すべての構文解析が完了した 1659 1690 @@b_end_all_parse = false 1691 1692 # tag なし struct 1693 @@no_struct_tag_num = 0 1660 1694 1661 1695 def self.parse( file_name, plugin = nil, b_reuse = false ) … … 1773 1807 string += line 1774 1808 # この位置では error メソッドは使えない (token 読出し前) 1775 puts " error: #{file} line #{lineno}: string literal has newline without escape"1809 puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape" 1776 1810 @@n_error += 1 1777 1811 end … … 1814 1848 b_in_string = true 1815 1849 # この位置では error メソッドは使えない (token 読出し前) # mikan cdl_error ではない 1816 puts " error: #{file} line #{lineno}: string literal has newline without escape"1850 puts "#{file}:#{lineno}:#{col}: error: string literal has newline without escape" 1817 1851 @@n_error += 1 1818 1852 # 山括弧で囲まれた文字列 1819 when /\A<[0-9A-Za-z_\. \/]+>/ # AB: angle bracke 1853 # when /\A<[0-9A-Za-z_\. \/]+>/ # AB: angle bracke 1854 when /\A<(?:[^>\\]|\\.)*>/ # これはうまく行くようだ 1820 1855 @q << [:AB_STRING_LITERAL, Token.new($&, file, lineno, col)] 1821 1856 # 行コメント … … 1913 1948 @@n_error = 0 1914 1949 @@n_warning = 0 1950 @@n_info = 0 1915 1951 1916 1952 # このメソッドは構文解析、意味解析からのみ呼出し可(コード生成でエラー発生は不適切) … … 1946 1982 end 1947 1983 if locale then 1948 Console.puts " error: #{locale[0]}: line #{locale[1]}#{msg}"1984 Console.puts "#{locale[0]}:#{locale[1]}:#{locale[2]}: error: #{msg}" 1949 1985 else 1950 1986 Console.puts "error: #{msg}" … … 1979 2015 end 1980 2016 if locale then 1981 Console.puts " warning: #{locale[0]}: line #{locale[1]}#{msg}"2017 Console.puts "#{locale[0]}:#{locale[1]}:#{locale[2]}: warning: #{msg}" 1982 2018 else 1983 2019 Console.puts "warning: #{msg}" … … 1986 2022 end 1987 2023 2024 # このメソッドは構文解析、意味解析からのみ呼出し可 2025 def self.info( msg, *arg ) 2026 locale = nil 2027 self.info2( locale, msg, *arg ) 2028 end 2029 2030 def self.info2( locale, msg, *arg ) 2031 @@n_info += 1 2032 2033 msg = TECSMsg.get_info_message( msg ) 2034 # $1, $2, ... を arg で置換 2035 count = 1 2036 arg.each{ |a| 2037 str = TECSIO.str_code_convert( msg, a.to_s ) 2038 msg.sub!( /\$#{count}/, str ) 2039 count += 1 2040 } 2041 2042 # import_C の中でのウォーニング? 2043 if @@import_C then 2044 C_parser.info( msg ) 2045 else 2046 if @@b_end_all_parse == false || locale == nil then 2047 locale = @@current_locale[ @@generator_nest ] 2048 end 2049 if locale then 2050 Console.puts "#{locale[0]}:#{locale[1]}:#{locale[2]}: info: #{msg}" 2051 else 2052 Console.puts "info: #{msg}" 2053 end 2054 end 2055 end 2056 1988 2057 def self.get_n_error 1989 2058 @@n_error … … 1994 2063 end 1995 2064 2065 def self.get_n_info 2066 @@n_info 2067 end 2068 1996 2069 def self.get_nest 1997 2070 @@generator_nest 2071 end 2072 2073 def self.parsing_C? 2074 @@import_C 1998 2075 end 1999 2076
Note:
See TracChangeset
for help on using the changeset viewer.