More Related Content Similar to サイボウズ・ラボユース 最終成果報告会プレゼンテーション Similar to サイボウズ・ラボユース 最終成果報告会プレゼンテーション (20) サイボウズ・ラボユース 最終成果報告会プレゼンテーション2. 自己紹介
• 工業高校3年生�電子工業科 所属
– 部活動でロボットとか作っていました
• セキュリティ&プログラミングキャンプ2010
� プログラミングコース 言語組 卒業生
• サイボウズ・ラボ ユース�第一期サブメンバー
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
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 \n &#x3053;&#x306E;&#x9593;&#x5352;&#x696D;&#x5F0F;&#x3000;&#x5DE5;&#x696D;&#x9AD8;&#x6821;&#xFF13;&#x5E74;&#x751F;\n&#x30BB;&#x30D7;&#x30AD;&#x30E3;&#x30F3;2010&#x5352;&#x696D;&#x751F;&#x30FB;&#x30FB;&#x30FB;&#x30E9;&#x30DC;&#x30E6;&#x30FC;&#x30B9;&#x77E5;&#x308B;&#x304D;&#x3063;&#x304B;&#x3051;&#x3060;&#x3063;&#x305F;&#x308A;\n&#x30E9;&#x30DC;&#x30E6;&#x30FC;&#x30B9;&#x3067;&#x306F; &#x30B5;&#x30D6;&#x30E1;&#x30F3;&#x30D0;&#x30FC;\n &#x5B66;&#x6821;&#x306E;&#x96FB;&#x5B50;&#x5DE5;&#x696D;&#x79D1;&#x3067;&#x306F;&#x5C02;&#x9580;&#x5206;&#x91CE;&#x306E;&#x6388;&#x696D;&#x3084;&#x308B;&#x304C;&#x3001;&#xFF13;&#x5E74;&#x306F;&#x8AB2;&#x984C;&#x7814;&#x7A76;&#x3092;&#x3084;&#x308B;\n&#x8A00;&#x8A9E;&#x51E6;&#x7406;&#x7CFB;&#x306E;&#x69CB;&#x9020;&#x3068;&#x52D5;&#x4F5C;&#x306B;&#x3064;&#x3044;&#x3066;&#x5B66;&#x3076;&#x3068;&#x3044;&#x3046;&#x30C6;&#x30FC;&#x30DE;&#x3067;&#x53D6;&#x308A;&#x7D44;&#x3093;&#x3060;\nRuby&#x3092;256&#x500D;&#x4F7F;&#x3046;&#x672C;&#x306E;&#x300C;Intp&#x300D;&#x3092;&#x984C;&#x6750;&#x3068;&#x3057;&#x3066;&#x3001;&#x8A00;&#x8A9E;&#x51E6;&#x7406;&#x7CFB;&#x304C;&#x3069;&#x306E;&#x3088;&#x3046;&#x306B;&#x52D5;&#x304F;&#x306E;&#x304B;&#x307F;&#x3066;&#x3044;&#x304F;\n &#x30E9;&#x30DC;&#x30E6;&#x30FC;&#x30B9;&#x306E;&#x51AC;&#x306E;&#x958B;&#x767A;&#x5408;&#x5BBF;&#x3067;&#x306F;&#x8AB2;&#x984C;&#x7814;&#x7A76;&#x306E;&#x5185;&#x5BB9;&#x3092;&#x767A;&#x5C55;&#x3055;&#x305B;&#x305F;&#x5F62;\nIntp&#x306E;&#x62E1;&#x5F35;&#x3068;&#x6539;&#x9020;&#x3092;&#x884C;&#x3063;&#x305F;\n&#x5177;&#x4F53;&#x7684;&#x306B;&#x306F;&#x30FB;&#x30FB;&#x30FB;\n &#x4E0B;&#x306B;&#x4F8B;&#x3092;&#x51FA;&#x3057;&#x307E;&#x3057;&#x305F;\nRuby&#x306B;&#x826F;&#x304F;&#x4F3C;&#x3066;&#x3044;&#x3066;&#x3001;Ruby &#x306E;&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x3092;&#x4F7F;&#x7528;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x308B;&#x3068;&#x3044;&#x3046;&#x3082;&#x306E;\n &#x6587;&#x6CD5;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x306E;&#x4E2D;&#x8EAB;&#x306F;&#x898F;&#x5247;&#x90E8;&#x3068;&#x30E6;&#x30FC;&#x30B6;&#x30FC;&#x30B3;&#x30FC;&#x30C9;&#x90E8;&#x306B;&#x308F;&#x304B;&#x308C;&#x3066;&#x3044;&#x308B;\n&#x62E1;&#x5F35;&#x3068;&#x6539;&#x9020;&#x306E;&#x4F5C;&#x696D;&#x306F;&#x3001;&#x4E3B;&#x306B;&#x6587;&#x6CD5;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x306B;&#x624B;&#x3092;&#x52A0;&#x3048;&#x3066;&#x3044;&#x304F;&#x3068;&#x3044;&#x3046;&#x5185;&#x5BB9;&#x306B;&#x306A;&#x308B;\n &#x5B9F;&#x969B;&#x306B;&#x884C;&#x3063;&#x305F;&#x5185;&#x5BB9;&#x3092;&#x307F;&#x3066;&#x3044;&#x304D;&#x307E;&#x3059;&#x3002;&#x3000;&#x307E;&#x305A;&#x6F14;&#x7B97;&#x5B50;&#x306E;&#x8FFD;&#x52A0;\n&#x6587;&#x6CD5;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x306B;&#x3053;&#x306E;&#x3088;&#x3046;&#x306A;&#x898F;&#x5247;&#x3068;&#x305D;&#x308C;&#x306B;&#x5BFE;&#x3059;&#x308B;&#x30A2;&#x30AF;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x8A18;&#x8FF0;&#x3057;&#x307E;&#x3057;&#x305F;\n&#x5F0F;&#x3000;&#xFF05;&#x3000;&#x5F0F;&#x3000;&#x306E;&#x4E26;&#x3073;\nFuncallNode &#x95A2;&#x6570;&#x547C;&#x3073;&#x51FA;&#x3057;&#x306E;&#x30CE;&#x30FC;&#x30C9;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;&#x3002;\n Ruby&#x306E;&#x6F14;&#x7B97;&#x5B50;&#x306F;&#x3001;&#x5F62;&#x5F0F;&#x4E0A;&#x306F;&#x8AAD;&#x307F;&#x3084;&#x3059;&#x304F;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x6F14;&#x7B97;&#x5B50;&#x5F62;&#x5F0F;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x304C;&#x3001;&#x5B9F;&#x969B;&#x306F;&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x547C;&#x3073;&#x51FA;&#x3057;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\n&#x4F8B;&#x306E;&#x3088;&#x3046;&#x306B;&#x3001;&#xFF15;&#x3092;&#x30EC;&#x30B7;&#x30FC;&#x30D0;&#x3068;&#x3057;&#x3066;&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x3092;&#x547C;&#x3073;&#x51FA;&#x3057;&#x305F;&#x308A;&#x3001;send&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x7D4C;&#x7531;&#x3067;&#x547C;&#x3073;&#x51FA;&#x3059;&#x3068;&#x3044;&#x3063;&#x305F;&#x3053;&#x3068;&#x304C;&#x53EF;&#x80FD;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\n &#x3053;&#x308C;&#x3068;&#x540C;&#x3058;&#x4E8B;&#x3092;&#x95A2;&#x6570;&#x547C;&#x3073;&#x51FA;&#x3057;&#x306E;&#x30CE;&#x30FC;&#x30C9;&#x306E;&#x307B;&#x3046;&#x3067;&#x884C;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x898F;&#x5247;&#x3068;&#x30DE;&#x30C3;&#x30C1;&#x3057;&#x305F;&#x5834;&#x5408;&#x306B;&#x3001;&#x95A2;&#x6570;&#x540D;&#x3068;&#x3057;&#x3066;&#x6F14;&#x7B97;&#x5B50;&#x306E;&#x7A2E;&#x985E;&#x3092;&#x3001;&#x5F15;&#x6570;&#x3068;&#x3057;&#x3066;&#x5DE6;&#x8FBA;&#x3068;&#x53F3;&#x8FBA;&#x306E;&#x5024;&#x3092;&#x9001;&#x308A;&#x3001;send&#x30E1;&#x30BD;&#x30C3;&#x30C9;&#x7D4C;&#x7531;&#x3067;&#x5B9F;&#x884C;&#x3055;&#x305B;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\n!= &#x306B;&#x3064;&#x3044;&#x3066;&#x3001;1.9&#x3067;&#x306F;&#x518D;&#x5B9A;&#x7FA9;&#x53EF;&#x80FD;&#x30FB;&#x30FB;&#x30FB;&#x306A;&#x3089;&#x3070;&#x3053;&#x306E;&#x624B;&#x6CD5;&#x4F7F;&#x3048;&#x308B;&#x306E;&#x3067;&#x306F;&#xFF1F;\n &#x30BD;&#x30FC;&#x30B9;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x8AAD;&#x307F;&#x53D6;&#x308A;&#x5B9F;&#x884C;&#x3059;&#x308B;&#x904E;&#x7A0B;&#x304C;&#x308F;&#x304B;&#x3063;&#x3066;&#x304D;&#x305F;&#x306E;&#x3067;&#x3001;&#x3053;&#x308C;&#x3092;&#x82F1;&#x5B57;&#x4EE5;&#x5916;&#x306E;&#x3082;&#x306E;&#x306B;&#x7F6E;&#x63DB;&#x3048;&#x308B;&#x4E8B;&#x306F;&#x3067;&#x304D;&#x306A;&#x3044;&#x304B;&#x3068;&#x8003;&#x3048;&#x307E;&#x3057;&#x305F;\n&#x65E5;&#x672C;&#x8A9E;&#x3067;&#x8A18;&#x8FF0;&#x3067;&#x304D;&#x308B;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x8A00;&#x8A9E;&#x3068;&#x3044;&#x3046;&#x3082;&#x306E;&#x304C;&#x5B58;&#x5728;&#x3059;&#x308B;&#x304C;&#x3001;&#x3053;&#x308C;&#x306B;&#x4F3C;&#x305F;&#x3088;&#x3046;&#x306A;&#x3082;&#x306E;&#x304C;&#x547D;&#x4EE4;&#x7F6E;&#x63DB;&#x3048;&#x3084;&#x4E26;&#x3079;&#x65B9;&#x306E;&#x5DE5;&#x592B;&#x3067;&#x5B9F;&#x73FE;&#x3067;&#x304D;&#x308B;&#x304B;&#x3082;&#x3057;&#x308C;&#x306A;&#x3044;\n &#x307E;&#x305A;Intp&#x3067;&#x4F7F;&#x308F;&#x308C;&#x3066;&#x3044;&#x305F;&#x547D;&#x4EE4;&#x3092;&#x4E00;&#x3064;&#x305A;&#x3064;&#x65E5;&#x672C;&#x8A9E;&#x8868;&#x73FE;&#x306B;&#x7F6E;&#x63DB;&#x3048;&#x308B;&#x4F5C;&#x696D;&#x3092;&#x884C;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;\n &#x6B21;&#x306B;&#x7F6E;&#x63DB;&#x3048;&#x305F;&#x3082;&#x306E;&#x306B;&#x5BFE;&#x5FDC;&#x3057;&#x305F;&#x6B63;&#x898F;&#x8868;&#x73FE;&#x3092;&#x6587;&#x6CD5;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x306E;&#x30B9;&#x30AD;&#x30E3;&#x30CA;&#x90E8;&#x306B;&#x8FFD;&#x52A0;&#x3057;&#x307E;&#x3057;&#x305F;&#x3002;&#x65E5;&#x672C;&#x8A9E;&#x306E;&#x5834;&#x5408;&#x540C;&#x3058;&#x610F;&#x5473;&#x306E;&#x3082;&#x306E;&#x3092;&#x8907;&#x6570;&#x306E;&#x8A00;&#x3044;&#x65B9;&#x3067;&#x8868;&#x73FE;&#x3067;&#x304D;&#x308B;&#x305F;&#x3081;&#x3001;&#x3044;&#x304F;&#x3064;&#x304B;&#x306E;&#x5834;&#x5408;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;&#x305F;&#x3081;&#x306B;&#x3053;&#x3053;&#x3067;&#x5BFE;&#x5FDC;&#x3092;&#x884C;&#x3063;&#x3066;&#x3044;&#x308B;&#x3002;&#x8A18;&#x53F7;&#x3092;&#x5272;&#x308A;&#x5F53;&#x3066;&#x3066;&#x3044;&#x308B;&#x3002;IF THEN ELSE &#x306F;&#x3082;&#x3068;&#x3082;&#x3068;&#x3042;&#x3063;&#x305F;&#x8A18;&#x53F7;&#x3092;&#x305D;&#x306E;&#x307E;&#x307E;&#x4F7F;&#x3046;&#x3002;\n &#x898F;&#x5247;&#x90E8;&#x306B;&#x65E5;&#x672C;&#x8A9E;&#x7528;&#x306E;&#x898F;&#x5247;&#x3068;&#x305D;&#x308C;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;&#x30A2;&#x30AF;&#x30B7;&#x30E7;&#x30F3;&#x3092;&#x8FFD;&#x52A0;&#x3059;&#x308B;&#x3053;&#x3068;&#x3067;&#x3001;&#x65E5;&#x672C;&#x8A9E;&#x5316;&#x3059;&#x308B;&#x3053;&#x3068;&#x304C;&#x3067;&#x304D;&#x307E;&#x3059;&#x3002;&#x65E5;&#x672C;&#x8A9E;&#x306E;&#x5834;&#x5408;&#x3001;&#x8A18;&#x53F7;&#x306E;&#x4E26;&#x3073;&#x306E;&#x9055;&#x3044;&#x3082;&#x8003;&#x616E;&#x3057;&#x306A;&#x304F;&#x3066;&#x306F;&#x3044;&#x3051;&#x306A;&#x3044;&#x3002;&#x305D;&#x308C;&#x306F;&#x3053;&#x3053;&#x3067;&#x5BFE;&#x5FDC;&#x3057;&#x3066;&#x3044;&#x308B;&#x3002;\n&#x3053;&#x306E;&#x3088;&#x3046;&#x306A;&#x5F62;&#x3067;&#x65E5;&#x672C;&#x8A9E;&#x30D7;&#x30ED;&#x30B0;&#x30E9;&#x30DF;&#x30F3;&#x30B0;&#x8A00;&#x8A9E;&#x5316;&#x3092;&#x884C;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;\n &#x5B66;&#x6821;&#x306E;&#x8AB2;&#x984C;&#x7814;&#x7A76;&#x3067;&#x306F;&#x5B66;&#x79D1;&#x3054;&#x3068;&#x306B;&#x4EE3;&#x8868;&#x8005;&#x304C;&#x7814;&#x7A76;&#x5185;&#x5BB9;&#x3092;&#x5168;&#x6821;&#x306B;&#x767A;&#x8868;&#x3059;&#x308B;&#x3053;&#x3068;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x308B;\n&#x30C6;&#x30FC;&#x30DE;&#x304C;&#x9078;&#x3070;&#x308C;&#x3001;&#x5168;&#x6821;&#x751F;&#x5F92;&#x306B;&#x767A;&#x8868;&#x3092;&#x884C;&#x3044;&#x307E;&#x3057;&#x305F;&#x3002;\n &#x8AB2;&#x984C;&#x7814;&#x7A76;&#x306E;&#x76EE;&#x7684;&#x3060;&#x3063;&#x305F;&#x69CB;&#x9020;&#x3068;&#x52D5;&#x4F5C;&#x306B;&#x3064;&#x3044;&#x3066;&#x7406;&#x89E3;&#x3059;&#x308B;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#x3059;&#x304C;&#x3001;&#x62E1;&#x5F35;&#x3084;&#x6539;&#x9020;&#x884C;&#x3063;&#x3066;&#x884C;&#x304F;&#x4E2D;&#x3067;&#x4EE5;&#x524D;&#x3088;&#x308A;&#x7406;&#x89E3;&#x3092;&#x6DF1;&#x3081;&#x308B;&#x4E8B;&#x306F;&#x3067;&#x304D;&#x305F;&#x3068;&#x601D;&#x3046;&#x3002;&#x305F;&#x3060;&#x3001;&#x69CB;&#x6587;&#x6728;&#x306E;&#x69CB;&#x7BC9;&#x3092;&#x884C;&#x3046;&#x90E8;&#x5206;&#x306A;&#x3069;&#x3001;&#x307E;&#x3060;&#x30B9;&#x30AD;&#x30EB;&#x4E0D;&#x8DB3;&#x3092;&#x611F;&#x3058;&#x308B;&#x305F;&#x3081;&#x52C9;&#x5F37;&#x3092;&#x7D9A;&#x3051;&#x305F;&#x3044;&#x3002;\n \n