| 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