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 |
--
← 前のページに戻る
Closure Basicの構文定義をデカルト言語で書き下してみましょう。 デカルト言語では、このように書いた構文定義はパーサ(構文解析器)として、ほぼそのまま使えます。
では、実際のパーサを示しましょう。 以下のようにデカルト言語では拡張バッカス記法(EBNF)と同様に構文パーサを定義することが出来るのです。
<ClosureBasic> <program> ; <program> {<sentence> {":" <sentence>} } ; <sentence> (<If> | <For> | <While> | <Print> | <InputNum> | <Input> | <Return> | <DefArray> | <Gosub> | <Assignment> | <Comment> ) ; <If> "if" <Conditional> "then" <program> { "else" "if" <Conditional> "then" <program>} [ "else" <program>] "end" ; <For> "for" <VARIABLE> "=" <Expression> "to" <Expression> <program> "next" ; <While> "while" <Conditional> "do" <program> "end" ; <Print> "print" ( <CR> | <Displayitem> {"," <Displayitem>} [";"] ) ; <Displayitem> <Exp_closure> | <Expression> | <Exp_strings> ; <InputNum> "input#" [<STRINGS> "," ] <VARIABLE> ; <Input> "input" [<STRINGS> "," ] <VARIABLE> ; <Gosub> ("gosub" | "call") <Expression> ; <Assignment> <VARIABLE> ("=" (<Expression> | <Exp_strings>)) ; <Return> "return" <Expression> ; <DefArray> "dim" <ID> "[" <NUM> "]" { "," <ID> "[" <NUM> "]"} ; <Fun> "{" "fun" "(" <FunParm> ")" <program> "}" ; <FunParm> [<VARIABLE> {"," <VARIABLE>}] ; <Conditional> <cond_or> ; <cond_or> <cond_and> { "or" <cond_and>} ; <cond_and> <cond> { "and" <cond> } ; <cond> "(" <Conditional> ")" | <Compare> ; <Compare> <Expression> ( "==" <Expression> | "=" <Expression> | "!=" <Expression> | "<>" <Expression> | ">="<Expression> | ">" <Expression> | "<=" <Expression> | "<" <Expression> ) ; <Exp_strings> <StringsTerm> { "+" <StringsTerm> } ; <StringsTerm> (<VARIABLE> | <STRINGS>) ; <Expression> <expradd> ; <expradd> <exprmul> {"+" <exprmul> | "-" <exprmul>} ; <exprmul> <exprID> {"*" <exprID> | "/" <exprID>} ; <exprID> ("+" <exprterm> | "-" <exprterm> | <exprterm>) ; <exprterm> <exprterm2> {"(" <Parm> ")"} ; <Parm> [<Expression> {"," <Expression>]] ; <exprterm2> ("(" <Expression> ")" | <Fun> | <NUM> | <STRINGS> | <Builtin> | <VARIABLE>) ; <Builtin> ("random" "(" <Expression> ")") ; <VARIABLE> <ID> ["[" <Expression> "]" ] ; <Comment> "'" <SKIPCR> ;
このパーサにより、Closure Basicの構文は厳密に定義されました。
さらに実際のコンパイラにするには、このパーサに変数管理、スコープ、クロージャ、パラメタおよび命令コード出力処理などを追加することになります。
[PageInfo]
LastUpdate: 2011-05-09 23:01:19, ModifiedBy: hniwa
[License]
Creative Commons 2.1 Attribution
[Permissions]
view:all, edit:login users, delete/config:login users