SlideShare a Scribd company logo
1 of 16
Ruby・Raccを使用した
言語処理系の日本語プログラミング化
    長野県松本工業高等学校
       桐井 祐樹
自己紹介
• 工業高校3年生�電子工業科 所属
 – 部活動でロボットとか作っていました


• セキュリティ&プログラミングキャンプ2010
� プログラミングコース 言語組 卒業生

• サイボウズ・ラボ ユース�第一期サブメンバー
卒業課題研究
• 電子工業科3年の行う授業
• 言語処理系の構造と動作について学ぶ
 – Ruby & Racc で作られたインタプリタ言語「Intp」�
 –               Ruby を256倍使うための本�無道編
 ��������������������� 青木 峰郎�著
冬の開発合宿でやったこと
• Intp の拡張と改造
 – 演算子の追加
   剰余算(%), 比較( >, <, >=, <=)
   否定(!=)

 – 英字以外で記述されたプログラムの実行
   • 日本語プログラミング言語化
Intp�
•   Ruby に似た構文規則
•   変数の型はなし
•   パーサジェネレータに Racc を使用
•   組み込みの関数は Ruby のメソッドを使用
     message = "hello"
     puts( concat( message, ", world! " )) �#=> hello, world

     a = 10
     b = 20
     if a <= b then
       print( "if ok!" + "n" )   ������������ �#=> if ok!
     end
Racc
• Ruby 向けパーサジェネレータ�( Ruby yacc )
• 文字の並びをコンピュータが理解できるよう
 変換する (パース parse)
• 文法ファイル�*.y を読み込み *.rb を生成
 – 規則部 (文法規則を記述)
 – ユーザーコード部
   (ファイルからの読み込み・スキャナ部を記述)
演算子の追加
• Racc 文法ファイルに規則を追加
- parser.y
 expr : expr '+' expr
�����      | expr '-' expr
��������������������・
��������������������・�������(省略)
��������������������・
     ���� | expr '%' expr
     ���� {
        ������result = FuncallNode.new( @fname,
�����������������������������val[0].lineno,�'%', [val[0],val[2]] )
       ����}
• Ruby の演算子
 – 実際にはメソッド呼び出し ( 再定義可能 )
  | �^ �& �<=> �== �=== �=~ �> �>= �< �<= �<< � >>
  + �-� *� /� %� **� ~� +@� -@ �[]� []=� `
                  Ruby 1.9.2 リファレンスマニュアル - 演算子式

     例 ) 5�%�2�の場合
     �������$ irb
     �������irb(main):001:0> 5 % 2
     �������=> 1
     �������irb(main):002:0> 5.%( 2 )
     �������=> 1
     �������irb(main):003:0> 5.send( '%', 2 )
     �������=> 1
• send で % メソッドを指定して実行
-�parser.y
����result = FuncallNode.new( @fname,�
                          val[0].lineno, '%', [val[0],�val[2]] )
�������������������������������������������������������������5����������2

-�node.rb
����recv = arg.shift
����recv.send @funcname, *arg
  �����5���� ������������%�� ������� 2
日本語による記述への対応
• 英字以外でプログラミングできないか?
 – 記号
 – 絵文字
 – 漢字・ひらがな・カタカナ


• 日本語でプログラミング・・・?
 – 命令の置き換え & 並べ方 で実現できるかも
• 命令を一つずつ日本語表現に置き換える
message = “hello!”       message に「こんにちは!」 を代入
puts message             message を表示

a = 10                   a に 10 を代入
b = 20                   b に 20 を代入
if a > b then            もし a が b より大きい なら
   puts “a は b よりも大きい”     「a は b よりも大きい」 と表示
else                     それ以外なら
   puts “a は b よりも小さい”     「a は b よりも小さい」 と表示
end                      終了

true                     真
false                    偽
• スキャナ部に正規表現を追加
  #代入
   when /A代入(する?)|入れる/
     @q.push [ :DAINYU, [lineno, $&.intern] ]

  #条件分岐(if)
   when /Aもし(も)?/
     @q.push [ :IF, [lineno, $&.intern] ]
   when /Aなら(ば)?/
     @q.push [ :THEN, [lineno, $&.intern] ]
   when /Aそうでないなら(ば)?|それ以外なら(ば)?/
     @q.push [ :ELSE, [lineno, $&.intern] ]

 – 日本語表現1つ1つに記号を割り当て

  マッチした場合、記号と値をキューに push する
• 文法ファイルに日本語用の規則を追加
       例)�変数への代入
       Racc 文法ファイルの規則部                         �������実際の記述例
assign : IDENT '=' expr
   ��� {                                             �����message = “hello!”
        ����result = AssignNode.new( @fname,
            ���       val[0][0], val[0][1], val[2] )
     ���}
     ���| IDENT NI expr WO DAINYU
    � �{                                             �����message に 「こんにちは!」を 代入
        ����result = AssignNode.new( @fname,
                  �� val[0][0], val[0][1], val[2] )
     ��}
     ���| expr WO IDENT NI DAINYU
     ��{                                             �����「こんにちは!」を message に 代入
        ����result = AssignNode.new( @fname,
                 � val[2][0], val[2][1], val[0] )
     ��}
課題研究発表会
• 全校生徒に発表しました!
研究を通して
• 言語処理系の構造と動作について
 – 以前より理解を深めることができた
 � 実装のためのスキル向上をしなければ・・・
• 日本語化に関して
 – 記号増加による規則の衝突の発生
   (17 shift/reduce conflicts)
 – コンピュータを操作する手段としての「言語」
   普段のプログラミングとは違う感覚
   ( UI ・ 情報可視化の分野へどう繋げられるか )
ご清聴ありがとうございました

More Related Content

Viewers also liked

世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装Ryoma Sin'ya
 
ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)Shinichi Awamoto
 
中間成果報告会 発表資料
中間成果報告会 発表資料中間成果報告会 発表資料
中間成果報告会 発表資料sn_monochr
 
人が神姫ん感(原文ママ)を感じるコンピュータ
人が神姫ん感(原文ママ)を感じるコンピュータ人が神姫ん感(原文ママ)を感じるコンピュータ
人が神姫ん感(原文ママ)を感じるコンピュータharu2036
 
Ruby × Arduinoで フィジカルコンピューティング やってみた
Ruby × Arduinoで フィジカルコンピューティング やってみたRuby × Arduinoで フィジカルコンピューティング やってみた
Ruby × Arduinoで フィジカルコンピューティング やってみたshiftky
 
C-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しようC-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しようKota Uchida
 
正規言語でプログラミング
正規言語でプログラミング正規言語でプログラミング
正規言語でプログラミングRyoma Sin'ya
 
サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会slankdev
 
サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会Komei Kamiya
 
EMNLP 2015 yomikai
EMNLP 2015 yomikai EMNLP 2015 yomikai
EMNLP 2015 yomikai Yo Ehara
 
Humor Recognition and Humor Anchor Extraction
Humor Recognition and Humor Anchor ExtractionHumor Recognition and Humor Anchor Extraction
Humor Recognition and Humor Anchor Extraction裕樹 奥田
 
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章Shuyo Nakatani
 
Learning Better Embeddings for Rare Words Using Distributional Representations
Learning Better Embeddings for Rare Words Using Distributional RepresentationsLearning Better Embeddings for Rare Words Using Distributional Representations
Learning Better Embeddings for Rare Words Using Distributional RepresentationsTakanori Nakai
 
星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章Shuyo Nakatani
 
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...Shuyo Nakatani
 
A Neural Attention Model for Sentence Summarization [Rush+2015]
A Neural Attention Model for Sentence Summarization [Rush+2015]A Neural Attention Model for Sentence Summarization [Rush+2015]
A Neural Attention Model for Sentence Summarization [Rush+2015]Yuta Kikuchi
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)lestrrat
 
サイボウズ・ラボユース成果発表会資料
サイボウズ・ラボユース成果発表会資料サイボウズ・ラボユース成果発表会資料
サイボウズ・ラボユース成果発表会資料masahiro13
 
2016プロシンスポンサー 加筆版
2016プロシンスポンサー 加筆版2016プロシンスポンサー 加筆版
2016プロシンスポンサー 加筆版Hirokazu Nishio
 

Viewers also liked (20)

世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装世界最速の正規表現JITエンジンの実装
世界最速の正規表現JITエンジンの実装
 
ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)
 
中間成果報告会 発表資料
中間成果報告会 発表資料中間成果報告会 発表資料
中間成果報告会 発表資料
 
人が神姫ん感(原文ママ)を感じるコンピュータ
人が神姫ん感(原文ママ)を感じるコンピュータ人が神姫ん感(原文ママ)を感じるコンピュータ
人が神姫ん感(原文ママ)を感じるコンピュータ
 
Ruby × Arduinoで フィジカルコンピューティング やってみた
Ruby × Arduinoで フィジカルコンピューティング やってみたRuby × Arduinoで フィジカルコンピューティング やってみた
Ruby × Arduinoで フィジカルコンピューティング やってみた
 
C-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しようC-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しよう
 
正規言語でプログラミング
正規言語でプログラミング正規言語でプログラミング
正規言語でプログラミング
 
サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会サイボウズ・ラボユース成果報告会
サイボウズ・ラボユース成果報告会
 
サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会サイボウズ・ラボ成果発表会
サイボウズ・ラボ成果発表会
 
Emnlp読み会資料
Emnlp読み会資料Emnlp読み会資料
Emnlp読み会資料
 
EMNLP 2015 yomikai
EMNLP 2015 yomikai EMNLP 2015 yomikai
EMNLP 2015 yomikai
 
Humor Recognition and Humor Anchor Extraction
Humor Recognition and Humor Anchor ExtractionHumor Recognition and Humor Anchor Extraction
Humor Recognition and Humor Anchor Extraction
 
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章
 
Learning Better Embeddings for Rare Words Using Distributional Representations
Learning Better Embeddings for Rare Words Using Distributional RepresentationsLearning Better Embeddings for Rare Words Using Distributional Representations
Learning Better Embeddings for Rare Words Using Distributional Representations
 
星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章
 
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
 
A Neural Attention Model for Sentence Summarization [Rush+2015]
A Neural Attention Model for Sentence Summarization [Rush+2015]A Neural Attention Model for Sentence Summarization [Rush+2015]
A Neural Attention Model for Sentence Summarization [Rush+2015]
 
Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)Kubernetes in 30 minutes (2017/03/10)
Kubernetes in 30 minutes (2017/03/10)
 
サイボウズ・ラボユース成果発表会資料
サイボウズ・ラボユース成果発表会資料サイボウズ・ラボユース成果発表会資料
サイボウズ・ラボユース成果発表会資料
 
2016プロシンスポンサー 加筆版
2016プロシンスポンサー 加筆版2016プロシンスポンサー 加筆版
2016プロシンスポンサー 加筆版
 

Similar to サイボウズ・ラボユース 最終成果報告会プレゼンテーション

普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語RShuyo Nakatani
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„Kaz Aiso
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門masatora atarashi
 
CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?Hayato Mizuno
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)Masahiro Hayashi
 
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Hisakuni Fujimoto
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門bleis tift
 
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』Kenta USAMI
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーるSachiko Hirata
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミングOuka Yuka
 
Mahoutにパッチを送ってみた
Mahoutにパッチを送ってみたMahoutにパッチを送ってみた
Mahoutにパッチを送ってみたissaymk2
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
JavaScript 非同期処理 入門
JavaScript非同期処理 入門JavaScript非同期処理 入門
JavaScript 非同期処理 入門Ishibashi Ryosuke
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発emasaka
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章YOSHIKAWA Ryota
 
Ruby でつくる型付き Ruby
Ruby でつくる型付き RubyRuby でつくる型付き Ruby
Ruby でつくる型付き Rubymametter
 

Similar to サイボウズ・ラボユース 最終成果報告会プレゼンテーション (20)

普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語R
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
Python opt
Python optPython opt
Python opt
 
CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?CoffeeScriptってなんぞ?
CoffeeScriptってなんぞ?
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 
関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーる
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
Mahoutにパッチを送ってみた
Mahoutにパッチを送ってみたMahoutにパッチを送ってみた
Mahoutにパッチを送ってみた
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
JavaScript 非同期処理 入門
JavaScript非同期処理 入門JavaScript非同期処理 入門
JavaScript 非同期処理 入門
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
 
Ruby でつくる型付き Ruby
Ruby でつくる型付き RubyRuby でつくる型付き Ruby
Ruby でつくる型付き Ruby
 

サイボウズ・ラボユース 最終成果報告会プレゼンテーション

  • 2. 自己紹介 • 工業高校3年生�電子工業科 所属 – 部活動でロボットとか作っていました • セキュリティ&プログラミングキャンプ2010 � プログラミングコース 言語組 卒業生 • サイボウズ・ラボ ユース�第一期サブメンバー
  • 3. 卒業課題研究 • 電子工業科3年の行う授業 • 言語処理系の構造と動作について学ぶ – Ruby & Racc で作られたインタプリタ言語「Intp」� – Ruby を256倍使うための本�無道編 ��������������������� 青木 峰郎�著
  • 4. 冬の開発合宿でやったこと • Intp の拡張と改造 – 演算子の追加 剰余算(%), 比較( >, <, >=, <=) 否定(!=) – 英字以外で記述されたプログラムの実行 • 日本語プログラミング言語化
  • 5. Intp� • Ruby に似た構文規則 • 変数の型はなし • パーサジェネレータに Racc を使用 • 組み込みの関数は Ruby のメソッドを使用 message = "hello" puts( concat( message, ", world! " )) �#=> hello, world a = 10 b = 20 if a <= b then print( "if ok!" + "n" ) ������������ �#=> if ok! end
  • 6. Racc • Ruby 向けパーサジェネレータ�( Ruby yacc ) • 文字の並びをコンピュータが理解できるよう 変換する (パース parse) • 文法ファイル�*.y を読み込み *.rb を生成 – 規則部 (文法規則を記述) – ユーザーコード部 (ファイルからの読み込み・スキャナ部を記述)
  • 7. 演算子の追加 • Racc 文法ファイルに規則を追加 - parser.y expr : expr '+' expr ����� | expr '-' expr ��������������������・ ��������������������・�������(省略) ��������������������・ ���� | expr '%' expr ���� { ������result = FuncallNode.new( @fname, �����������������������������val[0].lineno,�'%', [val[0],val[2]] ) ����}
  • 8. • Ruby の演算子 – 実際にはメソッド呼び出し ( 再定義可能 ) | �^ �& �<=> �== �=== �=~ �> �>= �< �<= �<< � >> + �-� *� /� %� **� ~� +@� -@ �[]� []=� ` Ruby 1.9.2 リファレンスマニュアル - 演算子式 例 ) 5�%�2�の場合 �������$ irb �������irb(main):001:0> 5 % 2 �������=> 1 �������irb(main):002:0> 5.%( 2 ) �������=> 1 �������irb(main):003:0> 5.send( '%', 2 ) �������=> 1
  • 9. • send で % メソッドを指定して実行 -�parser.y ����result = FuncallNode.new( @fname,� val[0].lineno, '%', [val[0],�val[2]] ) �������������������������������������������������������������5����������2 -�node.rb ����recv = arg.shift ����recv.send @funcname, *arg �����5���� ������������%�� ������� 2
  • 10. 日本語による記述への対応 • 英字以外でプログラミングできないか? – 記号 – 絵文字 – 漢字・ひらがな・カタカナ • 日本語でプログラミング・・・? – 命令の置き換え & 並べ方 で実現できるかも
  • 11. • 命令を一つずつ日本語表現に置き換える message = “hello!” message に「こんにちは!」 を代入 puts message message を表示 a = 10 a に 10 を代入 b = 20 b に 20 を代入 if a > b then もし a が b より大きい なら puts “a は b よりも大きい” 「a は b よりも大きい」 と表示 else それ以外なら puts “a は b よりも小さい” 「a は b よりも小さい」 と表示 end 終了 true 真 false 偽
  • 12. • スキャナ部に正規表現を追加 #代入 when /A代入(する?)|入れる/ @q.push [ :DAINYU, [lineno, $&.intern] ] #条件分岐(if) when /Aもし(も)?/ @q.push [ :IF, [lineno, $&.intern] ] when /Aなら(ば)?/ @q.push [ :THEN, [lineno, $&.intern] ] when /Aそうでないなら(ば)?|それ以外なら(ば)?/ @q.push [ :ELSE, [lineno, $&.intern] ] – 日本語表現1つ1つに記号を割り当て マッチした場合、記号と値をキューに push する
  • 13. • 文法ファイルに日本語用の規則を追加 例)�変数への代入 Racc 文法ファイルの規則部 �������実際の記述例 assign : IDENT '=' expr ��� { �����message = “hello!” ����result = AssignNode.new( @fname, ��� val[0][0], val[0][1], val[2] ) ���} ���| IDENT NI expr WO DAINYU � �{ �����message に 「こんにちは!」を 代入 ����result = AssignNode.new( @fname, �� val[0][0], val[0][1], val[2] ) ��} ���| expr WO IDENT NI DAINYU ��{ �����「こんにちは!」を message に 代入 ����result = AssignNode.new( @fname, � val[2][0], val[2][1], val[0] ) ��}
  • 15. 研究を通して • 言語処理系の構造と動作について – 以前より理解を深めることができた � 実装のためのスキル向上をしなければ・・・ • 日本語化に関して – 記号増加による規則の衝突の発生 (17 shift/reduce conflicts) – コンピュータを操作する手段としての「言語」 普段のプログラミングとは違う感覚 ( UI ・ 情報可視化の分野へどう繋げられるか )

Editor's Notes

  1. \n
  2. &amp;#x3053;&amp;#x306E;&amp;#x9593;&amp;#x5352;&amp;#x696D;&amp;#x5F0F;&amp;#x3000;&amp;#x5DE5;&amp;#x696D;&amp;#x9AD8;&amp;#x6821;&amp;#xFF13;&amp;#x5E74;&amp;#x751F;\n&amp;#x30BB;&amp;#x30D7;&amp;#x30AD;&amp;#x30E3;&amp;#x30F3;2010&amp;#x5352;&amp;#x696D;&amp;#x751F;&amp;#x30FB;&amp;#x30FB;&amp;#x30FB;&amp;#x30E9;&amp;#x30DC;&amp;#x30E6;&amp;#x30FC;&amp;#x30B9;&amp;#x77E5;&amp;#x308B;&amp;#x304D;&amp;#x3063;&amp;#x304B;&amp;#x3051;&amp;#x3060;&amp;#x3063;&amp;#x305F;&amp;#x308A;\n&amp;#x30E9;&amp;#x30DC;&amp;#x30E6;&amp;#x30FC;&amp;#x30B9;&amp;#x3067;&amp;#x306F; &amp;#x30B5;&amp;#x30D6;&amp;#x30E1;&amp;#x30F3;&amp;#x30D0;&amp;#x30FC;\n
  3. &amp;#x5B66;&amp;#x6821;&amp;#x306E;&amp;#x96FB;&amp;#x5B50;&amp;#x5DE5;&amp;#x696D;&amp;#x79D1;&amp;#x3067;&amp;#x306F;&amp;#x5C02;&amp;#x9580;&amp;#x5206;&amp;#x91CE;&amp;#x306E;&amp;#x6388;&amp;#x696D;&amp;#x3084;&amp;#x308B;&amp;#x304C;&amp;#x3001;&amp;#xFF13;&amp;#x5E74;&amp;#x306F;&amp;#x8AB2;&amp;#x984C;&amp;#x7814;&amp;#x7A76;&amp;#x3092;&amp;#x3084;&amp;#x308B;\n&amp;#x8A00;&amp;#x8A9E;&amp;#x51E6;&amp;#x7406;&amp;#x7CFB;&amp;#x306E;&amp;#x69CB;&amp;#x9020;&amp;#x3068;&amp;#x52D5;&amp;#x4F5C;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x5B66;&amp;#x3076;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30C6;&amp;#x30FC;&amp;#x30DE;&amp;#x3067;&amp;#x53D6;&amp;#x308A;&amp;#x7D44;&amp;#x3093;&amp;#x3060;\nRuby&amp;#x3092;256&amp;#x500D;&amp;#x4F7F;&amp;#x3046;&amp;#x672C;&amp;#x306E;&amp;#x300C;Intp&amp;#x300D;&amp;#x3092;&amp;#x984C;&amp;#x6750;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x8A00;&amp;#x8A9E;&amp;#x51E6;&amp;#x7406;&amp;#x7CFB;&amp;#x304C;&amp;#x3069;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x52D5;&amp;#x304F;&amp;#x306E;&amp;#x304B;&amp;#x307F;&amp;#x3066;&amp;#x3044;&amp;#x304F;\n
  4. &amp;#x30E9;&amp;#x30DC;&amp;#x30E6;&amp;#x30FC;&amp;#x30B9;&amp;#x306E;&amp;#x51AC;&amp;#x306E;&amp;#x958B;&amp;#x767A;&amp;#x5408;&amp;#x5BBF;&amp;#x3067;&amp;#x306F;&amp;#x8AB2;&amp;#x984C;&amp;#x7814;&amp;#x7A76;&amp;#x306E;&amp;#x5185;&amp;#x5BB9;&amp;#x3092;&amp;#x767A;&amp;#x5C55;&amp;#x3055;&amp;#x305B;&amp;#x305F;&amp;#x5F62;\nIntp&amp;#x306E;&amp;#x62E1;&amp;#x5F35;&amp;#x3068;&amp;#x6539;&amp;#x9020;&amp;#x3092;&amp;#x884C;&amp;#x3063;&amp;#x305F;\n&amp;#x5177;&amp;#x4F53;&amp;#x7684;&amp;#x306B;&amp;#x306F;&amp;#x30FB;&amp;#x30FB;&amp;#x30FB;\n
  5. &amp;#x4E0B;&amp;#x306B;&amp;#x4F8B;&amp;#x3092;&amp;#x51FA;&amp;#x3057;&amp;#x307E;&amp;#x3057;&amp;#x305F;\nRuby&amp;#x306B;&amp;#x826F;&amp;#x304F;&amp;#x4F3C;&amp;#x3066;&amp;#x3044;&amp;#x3066;&amp;#x3001;Ruby &amp;#x306E;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3082;&amp;#x306E;\n
  6. &amp;#x6587;&amp;#x6CD5;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x306E;&amp;#x4E2D;&amp;#x8EAB;&amp;#x306F;&amp;#x898F;&amp;#x5247;&amp;#x90E8;&amp;#x3068;&amp;#x30E6;&amp;#x30FC;&amp;#x30B6;&amp;#x30FC;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x90E8;&amp;#x306B;&amp;#x308F;&amp;#x304B;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;\n&amp;#x62E1;&amp;#x5F35;&amp;#x3068;&amp;#x6539;&amp;#x9020;&amp;#x306E;&amp;#x4F5C;&amp;#x696D;&amp;#x306F;&amp;#x3001;&amp;#x4E3B;&amp;#x306B;&amp;#x6587;&amp;#x6CD5;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x306B;&amp;#x624B;&amp;#x3092;&amp;#x52A0;&amp;#x3048;&amp;#x3066;&amp;#x3044;&amp;#x304F;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x5185;&amp;#x5BB9;&amp;#x306B;&amp;#x306A;&amp;#x308B;\n
  7. &amp;#x5B9F;&amp;#x969B;&amp;#x306B;&amp;#x884C;&amp;#x3063;&amp;#x305F;&amp;#x5185;&amp;#x5BB9;&amp;#x3092;&amp;#x307F;&amp;#x3066;&amp;#x3044;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3000;&amp;#x307E;&amp;#x305A;&amp;#x6F14;&amp;#x7B97;&amp;#x5B50;&amp;#x306E;&amp;#x8FFD;&amp;#x52A0;\n&amp;#x6587;&amp;#x6CD5;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x306B;&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x898F;&amp;#x5247;&amp;#x3068;&amp;#x305D;&amp;#x308C;&amp;#x306B;&amp;#x5BFE;&amp;#x3059;&amp;#x308B;&amp;#x30A2;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3092;&amp;#x8A18;&amp;#x8FF0;&amp;#x3057;&amp;#x307E;&amp;#x3057;&amp;#x305F;\n&amp;#x5F0F;&amp;#x3000;&amp;#xFF05;&amp;#x3000;&amp;#x5F0F;&amp;#x3000;&amp;#x306E;&amp;#x4E26;&amp;#x3073;\nFuncallNode &amp;#x95A2;&amp;#x6570;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x306E;&amp;#x30CE;&amp;#x30FC;&amp;#x30C9;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  8. Ruby&amp;#x306E;&amp;#x6F14;&amp;#x7B97;&amp;#x5B50;&amp;#x306F;&amp;#x3001;&amp;#x5F62;&amp;#x5F0F;&amp;#x4E0A;&amp;#x306F;&amp;#x8AAD;&amp;#x307F;&amp;#x3084;&amp;#x3059;&amp;#x304F;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x6F14;&amp;#x7B97;&amp;#x5B50;&amp;#x5F62;&amp;#x5F0F;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x5B9F;&amp;#x969B;&amp;#x306F;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x4F8B;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x3001;&amp;#xFF15;&amp;#x3092;&amp;#x30EC;&amp;#x30B7;&amp;#x30FC;&amp;#x30D0;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x305F;&amp;#x308A;&amp;#x3001;send&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x7D4C;&amp;#x7531;&amp;#x3067;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3059;&amp;#x3068;&amp;#x3044;&amp;#x3063;&amp;#x305F;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x53EF;&amp;#x80FD;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  9. &amp;#x3053;&amp;#x308C;&amp;#x3068;&amp;#x540C;&amp;#x3058;&amp;#x4E8B;&amp;#x3092;&amp;#x95A2;&amp;#x6570;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x306E;&amp;#x30CE;&amp;#x30FC;&amp;#x30C9;&amp;#x306E;&amp;#x307B;&amp;#x3046;&amp;#x3067;&amp;#x884C;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x898F;&amp;#x5247;&amp;#x3068;&amp;#x30DE;&amp;#x30C3;&amp;#x30C1;&amp;#x3057;&amp;#x305F;&amp;#x5834;&amp;#x5408;&amp;#x306B;&amp;#x3001;&amp;#x95A2;&amp;#x6570;&amp;#x540D;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x6F14;&amp;#x7B97;&amp;#x5B50;&amp;#x306E;&amp;#x7A2E;&amp;#x985E;&amp;#x3092;&amp;#x3001;&amp;#x5F15;&amp;#x6570;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x5DE6;&amp;#x8FBA;&amp;#x3068;&amp;#x53F3;&amp;#x8FBA;&amp;#x306E;&amp;#x5024;&amp;#x3092;&amp;#x9001;&amp;#x308A;&amp;#x3001;send&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x7D4C;&amp;#x7531;&amp;#x3067;&amp;#x5B9F;&amp;#x884C;&amp;#x3055;&amp;#x305B;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n!= &amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x3001;1.9&amp;#x3067;&amp;#x306F;&amp;#x518D;&amp;#x5B9A;&amp;#x7FA9;&amp;#x53EF;&amp;#x80FD;&amp;#x30FB;&amp;#x30FB;&amp;#x30FB;&amp;#x306A;&amp;#x3089;&amp;#x3070;&amp;#x3053;&amp;#x306E;&amp;#x624B;&amp;#x6CD5;&amp;#x4F7F;&amp;#x3048;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x306F;&amp;#xFF1F;\n
  10. &amp;#x30BD;&amp;#x30FC;&amp;#x30B9;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x8AAD;&amp;#x307F;&amp;#x53D6;&amp;#x308A;&amp;#x5B9F;&amp;#x884C;&amp;#x3059;&amp;#x308B;&amp;#x904E;&amp;#x7A0B;&amp;#x304C;&amp;#x308F;&amp;#x304B;&amp;#x3063;&amp;#x3066;&amp;#x304D;&amp;#x305F;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x3053;&amp;#x308C;&amp;#x3092;&amp;#x82F1;&amp;#x5B57;&amp;#x4EE5;&amp;#x5916;&amp;#x306E;&amp;#x3082;&amp;#x306E;&amp;#x306B;&amp;#x7F6E;&amp;#x63DB;&amp;#x3048;&amp;#x308B;&amp;#x4E8B;&amp;#x306F;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x3044;&amp;#x304B;&amp;#x3068;&amp;#x8003;&amp;#x3048;&amp;#x307E;&amp;#x3057;&amp;#x305F;\n&amp;#x65E5;&amp;#x672C;&amp;#x8A9E;&amp;#x3067;&amp;#x8A18;&amp;#x8FF0;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x8A00;&amp;#x8A9E;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3082;&amp;#x306E;&amp;#x304C;&amp;#x5B58;&amp;#x5728;&amp;#x3059;&amp;#x308B;&amp;#x304C;&amp;#x3001;&amp;#x3053;&amp;#x308C;&amp;#x306B;&amp;#x4F3C;&amp;#x305F;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x3082;&amp;#x306E;&amp;#x304C;&amp;#x547D;&amp;#x4EE4;&amp;#x7F6E;&amp;#x63DB;&amp;#x3048;&amp;#x3084;&amp;#x4E26;&amp;#x3079;&amp;#x65B9;&amp;#x306E;&amp;#x5DE5;&amp;#x592B;&amp;#x3067;&amp;#x5B9F;&amp;#x73FE;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x304B;&amp;#x3082;&amp;#x3057;&amp;#x308C;&amp;#x306A;&amp;#x3044;\n
  11. &amp;#x307E;&amp;#x305A;Intp&amp;#x3067;&amp;#x4F7F;&amp;#x308F;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x305F;&amp;#x547D;&amp;#x4EE4;&amp;#x3092;&amp;#x4E00;&amp;#x3064;&amp;#x305A;&amp;#x3064;&amp;#x65E5;&amp;#x672C;&amp;#x8A9E;&amp;#x8868;&amp;#x73FE;&amp;#x306B;&amp;#x7F6E;&amp;#x63DB;&amp;#x3048;&amp;#x308B;&amp;#x4F5C;&amp;#x696D;&amp;#x3092;&amp;#x884C;&amp;#x3044;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;\n
  12. &amp;#x6B21;&amp;#x306B;&amp;#x7F6E;&amp;#x63DB;&amp;#x3048;&amp;#x305F;&amp;#x3082;&amp;#x306E;&amp;#x306B;&amp;#x5BFE;&amp;#x5FDC;&amp;#x3057;&amp;#x305F;&amp;#x6B63;&amp;#x898F;&amp;#x8868;&amp;#x73FE;&amp;#x3092;&amp;#x6587;&amp;#x6CD5;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EB;&amp;#x306E;&amp;#x30B9;&amp;#x30AD;&amp;#x30E3;&amp;#x30CA;&amp;#x90E8;&amp;#x306B;&amp;#x8FFD;&amp;#x52A0;&amp;#x3057;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x65E5;&amp;#x672C;&amp;#x8A9E;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x540C;&amp;#x3058;&amp;#x610F;&amp;#x5473;&amp;#x306E;&amp;#x3082;&amp;#x306E;&amp;#x3092;&amp;#x8907;&amp;#x6570;&amp;#x306E;&amp;#x8A00;&amp;#x3044;&amp;#x65B9;&amp;#x3067;&amp;#x8868;&amp;#x73FE;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x3001;&amp;#x3044;&amp;#x304F;&amp;#x3064;&amp;#x304B;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x306B;&amp;#x5BFE;&amp;#x5FDC;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x5BFE;&amp;#x5FDC;&amp;#x3092;&amp;#x884C;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3002;&amp;#x8A18;&amp;#x53F7;&amp;#x3092;&amp;#x5272;&amp;#x308A;&amp;#x5F53;&amp;#x3066;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3002;IF THEN ELSE &amp;#x306F;&amp;#x3082;&amp;#x3068;&amp;#x3082;&amp;#x3068;&amp;#x3042;&amp;#x3063;&amp;#x305F;&amp;#x8A18;&amp;#x53F7;&amp;#x3092;&amp;#x305D;&amp;#x306E;&amp;#x307E;&amp;#x307E;&amp;#x4F7F;&amp;#x3046;&amp;#x3002;\n
  13. &amp;#x898F;&amp;#x5247;&amp;#x90E8;&amp;#x306B;&amp;#x65E5;&amp;#x672C;&amp;#x8A9E;&amp;#x7528;&amp;#x306E;&amp;#x898F;&amp;#x5247;&amp;#x3068;&amp;#x305D;&amp;#x308C;&amp;#x306B;&amp;#x5BFE;&amp;#x5FDC;&amp;#x3059;&amp;#x308B;&amp;#x30A2;&amp;#x30AF;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x3092;&amp;#x8FFD;&amp;#x52A0;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3001;&amp;#x65E5;&amp;#x672C;&amp;#x8A9E;&amp;#x5316;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x65E5;&amp;#x672C;&amp;#x8A9E;&amp;#x306E;&amp;#x5834;&amp;#x5408;&amp;#x3001;&amp;#x8A18;&amp;#x53F7;&amp;#x306E;&amp;#x4E26;&amp;#x3073;&amp;#x306E;&amp;#x9055;&amp;#x3044;&amp;#x3082;&amp;#x8003;&amp;#x616E;&amp;#x3057;&amp;#x306A;&amp;#x304F;&amp;#x3066;&amp;#x306F;&amp;#x3044;&amp;#x3051;&amp;#x306A;&amp;#x3044;&amp;#x3002;&amp;#x305D;&amp;#x308C;&amp;#x306F;&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x5BFE;&amp;#x5FDC;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3002;\n&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x5F62;&amp;#x3067;&amp;#x65E5;&amp;#x672C;&amp;#x8A9E;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x8A00;&amp;#x8A9E;&amp;#x5316;&amp;#x3092;&amp;#x884C;&amp;#x3044;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;\n
  14. &amp;#x5B66;&amp;#x6821;&amp;#x306E;&amp;#x8AB2;&amp;#x984C;&amp;#x7814;&amp;#x7A76;&amp;#x3067;&amp;#x306F;&amp;#x5B66;&amp;#x79D1;&amp;#x3054;&amp;#x3068;&amp;#x306B;&amp;#x4EE3;&amp;#x8868;&amp;#x8005;&amp;#x304C;&amp;#x7814;&amp;#x7A76;&amp;#x5185;&amp;#x5BB9;&amp;#x3092;&amp;#x5168;&amp;#x6821;&amp;#x306B;&amp;#x767A;&amp;#x8868;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x306B;&amp;#x306A;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308B;\n&amp;#x30C6;&amp;#x30FC;&amp;#x30DE;&amp;#x304C;&amp;#x9078;&amp;#x3070;&amp;#x308C;&amp;#x3001;&amp;#x5168;&amp;#x6821;&amp;#x751F;&amp;#x5F92;&amp;#x306B;&amp;#x767A;&amp;#x8868;&amp;#x3092;&amp;#x884C;&amp;#x3044;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;\n
  15. &amp;#x8AB2;&amp;#x984C;&amp;#x7814;&amp;#x7A76;&amp;#x306E;&amp;#x76EE;&amp;#x7684;&amp;#x3060;&amp;#x3063;&amp;#x305F;&amp;#x69CB;&amp;#x9020;&amp;#x3068;&amp;#x52D5;&amp;#x4F5C;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x7406;&amp;#x89E3;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x62E1;&amp;#x5F35;&amp;#x3084;&amp;#x6539;&amp;#x9020;&amp;#x884C;&amp;#x3063;&amp;#x3066;&amp;#x884C;&amp;#x304F;&amp;#x4E2D;&amp;#x3067;&amp;#x4EE5;&amp;#x524D;&amp;#x3088;&amp;#x308A;&amp;#x7406;&amp;#x89E3;&amp;#x3092;&amp;#x6DF1;&amp;#x3081;&amp;#x308B;&amp;#x4E8B;&amp;#x306F;&amp;#x3067;&amp;#x304D;&amp;#x305F;&amp;#x3068;&amp;#x601D;&amp;#x3046;&amp;#x3002;&amp;#x305F;&amp;#x3060;&amp;#x3001;&amp;#x69CB;&amp;#x6587;&amp;#x6728;&amp;#x306E;&amp;#x69CB;&amp;#x7BC9;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x90E8;&amp;#x5206;&amp;#x306A;&amp;#x3069;&amp;#x3001;&amp;#x307E;&amp;#x3060;&amp;#x30B9;&amp;#x30AD;&amp;#x30EB;&amp;#x4E0D;&amp;#x8DB3;&amp;#x3092;&amp;#x611F;&amp;#x3058;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x52C9;&amp;#x5F37;&amp;#x3092;&amp;#x7D9A;&amp;#x3051;&amp;#x305F;&amp;#x3044;&amp;#x3002;\n
  16. \n