descartes-src (ソースパッケージ descartes-src-0.26.0.tar.gz) | 2012-09-09 20:57 |
descartes-win (Windows用バイナリパッケージ descartes-win-0.26.0.zip) | 2012-09-09 20:52 |
会話キャラクター: ツンデレ アプリケーション (会話キャラ:ツンデレ v1.0 for Windows) | 2010-04-29 13:41 |
会話キャラクター: 2人の女の子 ダブルキャラクター (会話キャラクター 2人の女の子 ダブルキャラクター 1.0 for Windows) | 2011-10-02 22:23 |
会話キャラクター: Eliza風英語版 (会話キャラ:Eliza風英語版 v1.0 for Windows) | 2010-05-11 01:06 |
会話キャラクター: 猫耳メイド アプリケーション (会話キャラ:猫耳メイド v1.0 for Windows) | 2010-04-27 21:15 |
会話キャラクター: イライザ風日本語版 (会話キャラ:イライザ風日本語版 v1.0 for Windows) | 2010-04-30 21:53 |
経済指標表示プログラム for Windows (経済指標表示プログラム V1.0) | 2011-08-18 22:04 |
ニュースヘッドライン表示プログラム (ニュースヘッドライン表示プログラム V1.0 for Windows) | 2011-08-16 12:31 |
デカルト言語 example (デカルト言語の例題 example-0.7.0.zip) | 2009-03-01 19:47 |
電力状況表示プログラム for Windows (2011年夏版 全国電力供給状況表示プログラム V1.0) | 2011-08-15 13:25 |
以下に日本語プログラミング言語「紫」のソース全体を示します。
デカルト言語で書かれた、たったの329ステップのプログラムで実現されています。
同じものは、デカルト言語の配布パッケージのexample/murasaki/murasakiに入っています。
/* * 日本語プログラミング言語「紫」 ver.0.1 * copyright (c) 2011 Hideyuki Niwa * */ /*** サブルーチン ***/ <checkword #word> ::sys <char #l #word> ::sys <isUnknown ::sys <member "、" #l>> ; <check ()> ; <check #l> ::sys <isAtom #l> <checkword #l> ; <check (#l:#out)> ( ::sys <isAtom #l> <checkword #l> <check #out> |<check #l> <check #out>) ; <errormsg #msg> <InputStr #str> <LineNo #ln> <warn> <warn #ln "行目 *** ERROR *** " #msg "↓" > <warn> <warn #str> <exit> ; /* * 構文解析部分 */ <アンド文 (#x1 : #x2)> <* #x1> と ["、"|","] <check #x1> <アンド文 #x2> ; <アンド文 (#x1)> <* #x1> ; <単文 let #y> <* #y> を ["、"|","] <check #y> 計算 ; <単文 compare #y> <* #y> を ["、"|","] <check #y> 比較 ; <単文 compare #y> <* #y> が ["、"|","] <check #y> 成立 ; <単文 M1 #x #y #z> <* #y> (は | が) ["、"|","] <check #y> <アンド文 #z> (が | を) ["、"|","] <check #z> <* #x> <check #x> ; <単文 M2 #x #y #z> <* #y> (は | が) ["、"|","] <check #y> <アンド文 #z> の ["、"|","] <check #z> <* #x> <check #x> ; <単文 M3 #x #y #z> <* #y> (は | が) ["、"|","] <check #y> <アンド文 #z> に ["、"|","] <check #z> <* #x> <check #x> ; <単文 M4 #x #y ()> <* #y> (は | が ) ["、"|","] <check #y> <* #x> <check #x> ; <単文 M5 #x #y ()> <* #y> (を|に|の) ["、"|","] <check #y> <* #x> <check #x> ; <単文末 #flag> ( (であるすべて | すべて) ("。" | "?" | "?") <is #flag 疑問すべて> | (ですか|か|であるか|するか|したか|しますか) ("。" | "?" | "?") <is #flag 疑問> | (してください | して下さい | して | しろ | せよ) "。" <is #flag 命令> | (です|だ|である|する|した|します) "。" <is #flag 宣言> | "。" <is #flag 宣言> ) ; <複文 #andxyz> <単文 :#xyz> ( (である場合 | であれば | であるとき | の場合 | のとき | するならば | ならば | するとき | したとき | する場合 | した場合) ["、"|","] <is #andxyz (#xyz)> | (であるかつ | であり | でかつ | するかつ | かつ | したかつ | し | で) ["、"|","] <複文 #andxyz2> <is #andxyz (#xyz : #andxyz2)> ) ; <定義文 #xyz #flag> <単文 :#Mxyz1> ( (である場合 | であれば | であるとき | の場合 | のとき | するならば | ならば | するとき | したとき | する場合 | した場合) ["、"|","] <単文 :#Mxyz2> <単文末 #flag> <is #xyz (#Mxyz2 #Mxyz1)> | <単文末 #flag> <is #xyz (#Mxyz1)> | (であるかつ | であり | でかつ | するかつ | かつ | したかつ | し | で) ["、"|","] <複文 #andxyz> <単文 :#Mxyz2> <単文末 #flag> <is #xyz (#Mxyz2 #Mxyz1 : #andxyz)> ) ; /* * 解析結果のデカルトプログラムをファイルに出力 */ <定義文プリント #out> ::sys <mkpredlist #outprd #out> <printlist <quote #outprd>> <printf <\_t> ";" <\_n>> ; <回答プリント (#out1 :#out)> ::sys <append #o #out (#out1)> ::sys <mkpredlist #outprd #o> <printf "? " > <printf "<回答 " > <printf <quote #outprd>> <printf ">;" <\_n>> ; <回答すべてプリント (#out1 :#out)> ::sys <append #o #out (#out1)> ::sys <mkpredlist #outprd #o> <printf "? " > <printf "<回答すべて "> <printf <quote #outprd>> <printf ">;" <\_n>> ; /*** 実行結果の出力 ***/ <回答アンド (#y1 :#y)> <printf #y1> <回答アンド2 #y> ; <回答アンド2 (#y1 :#y)> <printf "と" #y1> <回答アンド2 #y> ; <回答アンド2 ()> ; <回答単文 (M0 数式 #z #y)> <printf #z "は、数式"> ; <回答単文 (M1 #x #z #y)> <printf #z "は、"> <回答アンド #y> <printf "を" #x > ; <回答単文 (M2 #x #z #y)> <printf #z "は、"> <回答アンド #y> <printf "の" #x > ; <回答単文 (M3 #x #z #y)> <printf #z "は、"> <回答アンド #y> <printf "に" #x > ; <回答単文 (M4 #x #z #y)> <printf #z "は、"> <printf #x > ; <回答単文 (M5 #x #z #y)> <printf #z "を"> <printf #x > ; <回答文 ((#M #x #z #y) : #out)> <回答単文 (#M #x #z #y)> ( <is #out ()> <print "です。"> | <is #out ((#M2 #x2 #z2 #y2))> <printf "である場合、"> <回答文 #out> | <printf "であり、"> <回答文 #out>) ; <不明文 ((#M #x #z #y) : #out)> <回答単文 (#M #x #z #y)> ( <is #out ()> <print "ではありません。"> | <is #out ((#M2 #x2 #z2 #y2))> <printf "である場合、"> <不明文 #out> | <printf "であり、"> <不明文 #out>) ; <回答 #outprd2> ( <timeout 10000000 #outprd2> <回答文 #outprd2> | <不明文 #outprd2> ) ; <回答すべて #outprd2> ( <timeout 10000000 <findall #outprd2 <回答文 #outprd2> > > | <不明文 #outprd2> ) ; /* * 入力ファイルから文を一つ切り出す */ <コメント> "//" <SKIPCR> ; <文読み込み ()> <コメント> ; <文読み込み #l> <TOKEN #l <* #x> ("。" | "?" | "?" | EOF)> ; <行番号設定> <SKIPSPACE> ::sys <line #ln> <setVar LineNo #ln> ; /* * メイン処理 */ <読み込み> { <行番号設定> <文読み込み #in> <setVar InputStr #in> ::sys <strdelcntl #i #in> ( <is #i ()> | ::sys <syntax #i <NULLLINE>> | ::sys <syntax #i ( <定義文 #out #flag> ::sys <switch #flag 宣言 <定義文プリント #out> 疑問 ( <printf "? <printf '" #i "' <\_n>>; " <\_n>> <回答プリント #out> <print "? <print>;">) 命令 ( <printf "? <printf '" #i "' <\_n>>; " <\_n>> <回答プリント #out> <print "? <print>;">) 疑問すべて ( <printf "? <printf '" #i "' <\_n>>; " <\_n>> <回答すべてプリント #out> <print "? <print>;">) > [::sys <isUndefVar #out> <errormsg "構文が解釈できません。"> ] | <errormsg "構文に誤りがあります。"> ) > ) ::sys <flush> } ; <組み込み> <printf "<M4 リスト #x ()> ::sys <isList #x>;" <\_n> "<M5 表示 改行 ()> <print>;" <\_n> "<M5 表示 #x ()> <print #x>;" <\_n> > ; <起動> ::sys <PrintResultOff> ::sys <args #args> <is #args (_ #prg :_)> ::sys <openr #prg ::sys <openw "tempfile.txt" <組み込み> <読み込み>>> <load "tempfile.txt">; ; ? <起動>;
--
--
[PageInfo]
LastUpdate: 2011-09-07 02:40:39, ModifiedBy: hniwa
[License]
Creative Commons 2.1 Attribution
[Permissions]
view:all, edit:login users, delete/config:login users