# ポイント

■ひまわりの文法の要約

・文字規則

> ひまわりでは、Windows標準の文字コード、Shift-JISを使って処理をします。その際に、変換できるもの（アルファベット、数字、記号）は、全角（２バイト文字）を、半角（１バイト文字）に変換して実行をします。そのため、「Ａ(全角)」と、「A(半角)」を区別しません。

・分かち書きをする→詳しい解説

> ＊ひまわりは、長い文章から、単語を拾っているのではなくて、単純に、１区切れ単語を、１つの単語として、順に読んでいきます。そのため、読点（、）や空白文字（　）で区切らず、一綴りに、

> 「こんにちは」と言う。

> と、書くと、エラーと表示され、実行されません。しっかりと、

> 「こんにちは」と、言う。’、で区切る

> または

> 「こんにちは」と　言う。’スペースで区切る

> のように、単語ごとに、分かち書きをしてください。
> 各単語の区切り文字は、

> 、(読点) | ,(カンマ) | (スペース半角か全角)

> で、文の終わりには、

> 。(句点) | ；(セミコロン)

> を、つけます。

・送り仮名の省略が出来る

> ひまわりでは、送り仮名を無視して、日本語を解釈しますから、「言う」と書いても、「言え」と、書いても、同じように実行されます。

> 但し、送り仮名の定義は、「漢字やカタカナの後ろに続くひらがな」というものですから、「言うな」と、書いても、「言う」と同じように実行されてしまいます。

・基本文法

> 命令は、
> 引数、命令語
> からなり、
> 引数には、必ず明示的に、
> 目的語＋助詞
> と、助詞を、付けます。
> 助詞は、一部、数学関数などでは不要ですが、普通の命令では必要です。
> 以下の２つの書き方は、どちらも、認められます。
> （１）引数、命令語。・・・一般的な日本語に近い使い方（引数に助詞が必要）
> （２）命令語（引数）。・・・数学関数や、プログラム言語的な使い方（引数に助詞は不要）

> 例）
> １．「こんにちは」と、言う。
> ２．言う（「こんにちは」）。
> （＊２番目の場合は、助詞を省略して書くことが出来ます。）

・命令語の連続

> 以下のように、命令を文章のように繋げて記述することができます。

> 引数、命令語＋(し)て、引数、命令語＋(し)て・・・

> 例）
> ３に、５を、足して、表示。

・接続詞「そして」

> 滑らかな日本語を表現するために、接続詞の『そして』があります。
> これを、読むと、その時点での引数に過不足がないか、構文チェックを行う仕様になっています。

> それは、『こんにちは、Aちゃん。』。 『A』を、『ミネ』に、置換、そして、表示。

・引数の順序

> 引数は、『（目的語＋助詞）、（目的語＋助詞）・・・』のように与えられます。ここで、引数は、与えた順番と、助詞によって区別されます。

> そのため、以下の２つの文は、同じ意味になります。
> 例）

> 3に、5を、足して、表示。 5を、3に、足して、表示。

・引数の省略

> もし、引数を省略したり、指定よりも１つ少なく書いて命令を呼び出すと、一番初めの引数に、『それ』が、渡されます。
> 例えば、表示は、『？を、表示』のように、使いますが、

> それは、「こんにちは。」 表示。

> のように書くと、『「こんにちは」と、表示。』と、書いたのと全く同じ意味になります。
> また、『?から、?文字、左端を切り取る。』のように、2つ以上の引数をとる命令の場合は、

> それは、「１２３４５６７８９」 3文字、左端を切り取る。 それを、表示。’『１２３』と、表示される

> の、ように、1つ目の引数に、それが渡され、「１２３４５６７８９」のうちの、左から3文字切り取った値の、「１２３」が、表示されます。

・文

> 文の区切れは、「。」、または、改行によって区切られます。
> 命令は、改行をはさんで、記述することは出来ません。
> ただし、以下の命令（フロー制御用の特殊構文）だけは、改行して記述することが出来ます。
> ・？回（）。
> ・？で、？から、？まで、繰り返す
> ・もし・・・
> ・（条件）？ならば・・・
> 改行をはさむ時は、行の最後に、読点「、」を置けば、命令の途中でも改行できます。

> 文章は、『父ちゃんは、今日も、＠。』 文章の、 『＠』を、 『家に居ない』に、 置換して、 表示。 そして、 文章の、 『＠』を、 『パチンコに行った』に、 置換して、 表示。

・コメント

> ｛・・・｝で、括られてた（カッコの中）は、無視していいですよ、という意味になります。プログラム言語では、このような説明・注釈を、コメントって言います。コメントは、何も実行されません。

> （７００｛円｝＊１．０５｛税率｝）を、表示。

・コメント２

> ’(表示するときは、Shift + 7)から、改行までも、コメントになります。
> また、『こめ』で変換できる記号、『※』から、改行までも、コメントになります。
> また、『//』から、改行までも、コメントになります。
> 「こんにちは」と、言う。’ただの挨拶です (Basicからの引用)
> 「こんにちは」と、言う。※ただの挨拶です。(日本語の一般的？な表記)
> 「こんにちは」と、言う。//ただの挨拶です。（C,Pascal,Java言語から引用）

・変数と演算子

> 数値変数の使い方　→　変数＝値。
> 文字変数の使い方　→　変数＝「値」。
> 変数を使うための宣言は不要。
> （ちなみに、「バナナ＝３。」と書くのと、「バナナは、３。」と、書くのは、まったく同じ意味になります。）
> 計算に使える演算子一覧：

> 演算子 | 意味
> ＋ | たす
> − | ひく
> ×　または　＊ | かける
> ÷　または　／ | わる
> ％ | 割り算の余り
> ＾ | べき乗
> ＞、＜、<=、>=、<>、≠、≦、≧、＝ | 不等号
> ＆＆　または　かつ | かつ
> ｜｜　または　または | または

> 例）（（３＋４）＊３）を、表示。

> 文字列の連結には、＆を使う。

> > 今日の天気＝「はれ」。
> > 「今日の天気は、」＆今日の天気＆「です。」と、表示。
> > 「今日の天気は、｛今日の天気｝です。」と、表示。｛と書いても同じ｝

> それから、文字と数値を区別して、等しいか等しくないかを判別する演算子があります。

> 演算子 | 意味 | 使い方例 | 実行結果
> =& | 文字列が等しい | もし、"5" =& "５"ならば、「等しい」と、表示。 もし、"5" =& "5"ならば、「等しい」と、表示。 | ---（半角の5と全角の５は等しくないから。） 等しい
> !& | 文字列が等しくない | もし、"5" !& "５"ならば、「等しくない」と、表示。 | 等しくない(半角の5と全角の５は等しくないから。)
> == | 数値が等しい | もし、"5" == "５"ならば、「等しい」と、表示。 | 等しい（半角の5も、全角の５も、数値として等しいから。）
> != | 数値が等しくない | もし、3 != 5 ならば、「等しくない」と、表示。 | 等しくない

> 例えば、以下のように、数値として判断するか、文字列として判断するかによって判定結果が違う場合があります。

> A = 「5」 ' 半角の 5 B = 「５」' 全角の 5 もし、A == B ならば、「数値としては等しい」と、表示。 もし、A !& B ならば、「文字列としては等しくない」と、表示。

・文字列の注意 →詳しい解説 →さらに詳しい解説

> 「」の文字列中で、「」を書きたいときは、￥「、￥」のように、シーケンス文字「￥」をつけなくてはなりません。

> > ＊スピーチをする
> > 「｛話し手｝￥「それでは、私のスピーチです。・・・￥」」と、言う。

> また、画像ファイルの名前などで、パスを指定する「c:\picture\aaa.jpg」のような場合、「c:\\picture\\aaa.jpg」のように、￥を二回重ねる必要があります。

> 「文字列」　と　『文字列』のまとめ

> ■「文字列」形式の文字列：

> ｛変数名｝で、変数の内容を展開

> プログラム | りんご＝３。「りんごは、｛りんご｝個」と、表示。
> 結果 | りんごは、３個

> ￥ｎで、改行（CHR(13)&CHR(10)の意味)

> プログラム | 「あ￥ｎい￥ｎう」と、表示。
> 結果 | あ い う

> ￥ｔで、タブ記号

> プログラム | 「以下タブで字下げします。 ￥ｔあいうえお ￥ｔかきくけこ ￥ｔさしすせそ」と、表示。
> 結果 | 以下タブで字下げします。 あいうえお かきくけこ さしすせそ

> ￥￥で、『￥』の意味。￥だけだと、￥の意味にならない。

> プログラム | 結果
> 「c:\\windows\\notepad.exe」と、表示。 | c:\windows\notepad.exe
> 「c:\text\note.txt」と、表示。 | c:　　　ext ote.txt
> 「c:\\text\\note.txt」と、表示。 | c:\text\note.txt

> "内容"と、同じ意味

> プログラム | 「あいうえお」と、表示。 "あいうえお"と、表示。
> 結果 | あいうえお あいうえお

> ■『文字列』形式の文字列：
> いかなる展開も行われない。`内容`と。同じ意味。
> よって、`...`の、中で、`や、『』は、使えない。

・何回も繰り返す→詳しい解説

> ｛「ワン」と１０回吠えるプログラム２｝
> 文字サイズ＝１６。文字色＝青色。
> １０回（「ワン」と、表示。１秒、待つ。）。

> これは、カッコの中を、１０回実行しますよ！という意味になります。

・条件によって処理を分ける

> ・もし、Ａが、Ｂ（以上｜以下）ならば〜。違えば〜。→詳しい解説
> ・もし、（条件）ならば〜。違えば〜。→詳しい解説

> 例えば、晩御飯のおかずを買いに、スーパーへ行ったとして、レタスが、１９８円より安かったなら、レタスを買うことにして、それより高かったら、買うのはやめよう、という状況。

> もし、（レタスの値段　<=　１９８｛円｝）ならば、レタスを買う。
> 違えば、レタスを買わない。

> ・もし、（条件）ならば〜、違えば、もし、（条件）ならば〜、違えば、もし・・・

> 連続で条件文を続けることができます。

> タマ＝３歳 コロ＝４歳 ジン＝３歳 もし、タマ＝コロならば（ 「タマ＝コロ」と、表示。 ）違えば、もし、タマ＝ジンならば（ 「タマ＝ジン」と、表示。 ）違えば（ 「いずれもイコールではない」と、表示。 ）

> ●論理演算＞「複雑な条件をチェック」
> ●「もし〜でなければ」構文と連文
> もし以外の条件分岐（詳しい解説）もありますが、分かりにくい構文なので将来的なサポートは保証できません。

・ラベルへ、飛ぶ →詳しい解説

> 「ラベル名へ、飛ぶ」の書式で書きます。

> ｛RPG風にありがちな選択サンプルプログラム｝
> ＊ラベル｛という名のラベル｝
> 「聖なる泉へたどり着いた。泉の水を飲みますか？」と、二択。
> それ？ならば、「気持ちが楽になった。」と、言う。
> 違えば、「怖いから止めておこう」と、言う。
> 「ゲームをおわりますか？」と、二択。
> それ？ならば、おわり。
> 違えば、ラベルへ、飛ぶ。

> ＊注意ですが、「飛ぶ」命令のラベル名に、＊をつけないでください。

・ラベルを、呼ぶ →詳しい解説

> 「ラベル名を、呼ぶ」で、ラベルへ制御を移し、「戻る」という命令に出会えば、元の場所へ戻ってきます。

> > ｛ラベルを呼ぶ簡単なサンプル｝
> > ＊はじめラベル
> > 挨拶表示ラベルを、呼ぶ。
> > 祝辞表示ラベルを、呼ぶ。
> > おわり。
> > ＊挨拶表示ラベル
> > 「こんにちは。」と、言う。
> > 戻る。
> > ＊祝辞表示ラベル
> > 「本日は、実に目出度い！」と、言う。
> > 戻る。

> また、「ラベル名」と、だけ、記述しても、ラベルを呼ぶのと、同じ意味になります。

・計算式の中で、ラベルを呼ぶ →詳しい解説

> ｛例：計算式の中で、ラベル呼び出し｝
> 結婚式の参加者数＝新郎の客＋新婦の客。｛ラベルを呼び出し｝
> 結婚式の参加者数を、言う。
> 終わり。
> ＊新郎の客
> それ＝２０｛人｝
> 戻る。
> ＊新婦の客
> それ＝１８｛人｝
> 戻る。

## 関数的なラベルの使い方

> ・戻り値のあるラベル

> ラベルを、関数的に使う方法が、あります。呼ばれた先で、それに答えを入れると、それが、戻り値になります。

> ｛計算式の中で、ラベルを呼ぶ｝ 参加人数＝　男子の人数　＋　女子の人数。 参加人数を、表示。 待機。 ＊男子の人数 それ＝３０ 戻る。 ＊女子の人数 それ＝１０ 戻る。

> ・関数→関数の使い方

> ラベルの後ろに、（引数）を書くことにより、関数として利用できる。

> 1976年生まれの、年齢算出。 表示。 ＊年齢算出（?年生まれの） 今年は、MID(今日,1,4) 引数取得。 それは、今年 - それ。 戻る。

> 関数内では、『ローカル変数』命令を使うことで、ローカル変数を使える。
> 関数の引数を取得するには、『(変数?)に、引数取得』命令で、引数を取得できる。

## GUI 部品を使う

→詳しい説明

・オブジェクト利用の手順

1. 部品を作成する。
   「（部品名）（部品の種類）を、作る。」命令を使う。
   「（部品名）を、（部品の種類）として、作成。」命令を使う。
2. 部品の各項目を設定する。
   「（部品名）の、（項目名）は、（値）。」と、代入文を使う。
   「（部品名）の、（項目名）を、（値）に、設定」命令を使う。
3. 部品の各項目の値を得る。
   「（変数）は、（部品名）の、（項目名）。」と、参照を使う。
   「（部品名）の、（項目名）を、（変数）に、得る」命令を使う。

・特殊部品「母艦」

> ひまわりのキャンバスを、母艦という名前として、定義してあります。

> 母艦の、タイトルは、「ひまわりエディタ」。

> のように、使います。

> もちろん、幅、高さ、Ｘ、Ｙを設定すれば、フォームの大きさが変えられます。

・配列変数 →詳しい解説

> ひまわりにおける、普通の変数は、全て文字列で出来ており、計算が求められる場合には、数値として取り扱われる仕様になっています。そして、配列変数は、変数の値を、改行記号で区切ったものであり、例えば、変数名＃３と、書けば、４行目（０行から始まるため）が、値として得られる。

> そのため、配列変数の値として、改行を含むものが代入されると、要素番号が、かわってしまうので注意。

> 変数＃０＝「あ」。
> 変数＃１＝「い」。
> 変数＃１と、言う。｛いのみ表示｝
> 変数と、言う。｛あ、いを含んだ、全ての要素を表示する｝

・二次元配列

> 改行区切りの配列変数を、さらに、カンマで区切り、擬似的に、二次元配列変数を、実現している。

> 変数＃０＃０＝「あ」
> 変数＃０＃１＝「い」
> 変数＃０＃０と、言う。
> 変数と、いう。

・反復（イテレーター） →詳しい解説

> 配列である変数の各要素について、値を「それ」に、列挙し、直後の（実行文）を、反復します。

> > {反復子を使った例}
> > あ＃０＝「寿司」
> > あ＃１＝「天ぷら」
> > あ＃２＝「うどん」
> > あ＃３＝「牛丼」
> > あを、反復（
> > 「客￥「今日｛それ｝は、美味しい？￥」」を、表示。
> > ）。

・辞書（ハッシュ）→詳しい解説

> 『○○辞書の、△△は、「内容」』のようにして、辞書（ハッシュ）を使います。

> ネコ辞書の、「ミケ」は、６歳 ネコ辞書の、「タマ」は、８歳 （ネコ辞書の、「ミケ」）と、表示。

戻る