RMX student id To wixgroup rmx keio jp

  • Slides: 23
Download presentation

RMXとは student id To: wix@group. rmx. keio. jp 送信 問い合わ せ name group email

RMXとは student id To: wix@group. rmx. keio. jp 送信 問い合わ せ name group email 1 kosuda wix kosuda@ 2 gasho speed gasho@ 3 matsuzaki wix matsuzaki@ 4 yotaro wix yotaro@ 5 obunai speed obunai@ DBサーバー 返答 rmx. properties name RMXサーバー name. Type = String. . . 送信要求 group. Type = String group[1] = select student. email from student where student. group=$1 To: kosuda@ To: matsuzaki@ 4 mailサーバー To: yotaro@

RMXの問題点 • RMX班の人にメールを送ろう! RMX name group email yoshida speed yoshda@db aoyama speed bluemountain@db zonop

RMXの問題点 • RMX班の人にメールを送ろう! RMX name group email yoshida speed yoshda@db aoyama speed bluemountain@db zonop speed zonop@db obunai speed obunai@db iwasaki speed gasho@db aoyama+kitazono+obunai+iwasaki@name. rmx. keio. ac. jp • 実はこれはspeedグループからyoshidaという 人を除いたアドレスと同じだがルール間の 差分は定義されていない

アドレスエイリアス機能 • store機能 # sotre. < alias > # <adress>でアドレスを登録 #store. RMX#group{speed} – name{yoshda}@rmx.

アドレスエイリアス機能 • store機能 # sotre. < alias > # <adress>でアドレスを登録 #store. RMX#group{speed} – name{yoshda}@rmx. keio. ac. jp • recall機能 # recall. < alias > # <domain>で呼び出し #recall. RMX#@rmx. keio. ac. jp 短く・明快

SQLiteを用いた実装 rmx_alias RMXサーバー ユーザ #store. db 2#@ insert sender alias email ob@db db 1

SQLiteを用いた実装 rmx_alias RMXサーバー ユーザ #store. db 2#@ insert sender alias email ob@db db 1 db 2 a+b@db hoge@db DBサーバー 本来ユーザはこのデータベース を操作すべきではない! rmx_alias sender alias email ob@db db 1 db 2 a+b@db hoge@db

DEMO

DEMO

文法(生成規則)定義 • • • ( )* : 0回以上の繰り返し ( )+: 1回以上の繰り返し ( )? :

文法(生成規則)定義 • • • ( )* : 0回以上の繰り返し ( )+: 1回以上の繰り返し ( )? : 0回または 1回 Value() { <ARG> } Rule() { <ARG> } Domain. Arg() { <ARG> } Sub. Domain. Arg() { <ARG> } function() { <ARG> } alias() { <ARG> } Para() { Value() ( <MINUS> Value() )* } Paralist() { Para() ( <PLUS> Para() )* } Recipient() { Debug. Exp() }

文法(生成規則)定義 ( )* : 0回以上の繰り返し ( )+: 1回以上の繰り返し ( )? : 0回または 1回 •

文法(生成規則)定義 ( )* : 0回以上の繰り返し ( )+: 1回以上の繰り返し ( )? : 0回または 1回 • Exp() { Rule() <OP_BRACE> Paralist() <END_BRACE> } • Mul. Exp() { Exp() ( <PERIOD> Exp() )* } • Add. Exp() { Mul. Exp() ( <MINUS> Mul. Exp() |<PLUS> Mul. Exp() )* } • Address() { Add. Exp() <AT> domain() } • Debug. Exp() { ( Debug() )? Address() } • domain() { Sub. Domain. Arg() (<PERIOD> Domain. Arg() )+ } • Debug() { <HASH> finction() (<PERIOD> alias() )? <HASH> }

rule : name grp grade finalquery : (q 1)+((q 2+q 2). (q 3+q 4))

rule : name grp grade finalquery : (q 1)+((q 2+q 2). (q 3+q 4)) Recipient Debug. Exp Debug func [store] alias [test] Exp Address (q 1)+((q 2+q 2). (q 3+q 4)) Union q 1 (q 2+q 2). (q 3+q 4) Intersection q 2+q 2 Exp q 1 rule [name] name[1]=q 1 grp[1]=q 2 grade[1]=q 3 grade[2]=q 4 value [obunai] rule [grp] q 3+q 4 Exp q 3+q 4 q 2+q 2 Paralist q 2 value [speed] q 2 value [wix] Domain rule [grade] q 2 value [ssql] q 3 value [1] d. Arg [jp] d. Arg [ac] sub [keio] [rmx] Paralist value [3] q 4 Polimol. Para value [5] #sotre. test#name{obunai}+grp{speed+wix+ssql}. grade{1+3 -5}@rmx. keio. ac. jp

文法(生成規則)定義 ( )* : 0回以上の繰り返し ( )+: 1回以上の繰り返し ( )? : 0回または 1回 第1形式で用いられる文法

文法(生成規則)定義 ( )* : 0回以上の繰り返し ( )+: 1回以上の繰り返し ( )? : 0回または 1回 第1形式で用いられる文法 • • • Recipient 1() { Debug. Exp 1() } Debug. Exp 1() { ( Debug() )? Address 1() } Address 1() { Paras 1() <AT> domain 1() } Paras 1() { ( Paralist() <PERIOD> Paralist() )* } domain 1() { Domain. Arg() (<PERIOD> Domain. Arg() )+ }

rule [0] : grp rule [1] : grade Recipient1 dns: keio. ac. jp sub

rule [0] : grp rule [1] : grade Recipient1 dns: keio. ac. jp sub : rmx finalquery: (q 1). (q 2+q 3) Debug. Exp1 Debug func [store] alias [test] rule = rule[0] value [speed] Address 1 (q 1). (q 2+q 3) Paras 1 q 2+q 3 q 2 Paralis q 3 Polymor. Para value [1] grp[1]=q 1 grade[1]=q 2 grade[2]=q 3 rule=rule[1] value [3] Domain 1 d. Arg [grp] d. Arg [jp] [grade] [rmx] [keio] [ac] value [5] #sotre. test#speed. 1+3 -5@grp. grade. rmx. keio. ac. jp