！（びっくりマーク）言語：思い付きの人工言語的なのを何の調査もせずただ書く


# 趣旨

- 自然言語をコンピュータで構文解析できるように分解・整形するための文法を考える。
- 文法を見ると人工言語のようだが、語彙というものが一切なく、意味のある文を作る為には何かしらの自然言語に依存する必要がある。
- 自然言語の普遍的な構造を決められたフォーマットで記述する。
- ！言語本体としては記号だけを使う。語彙の表現に記号以外を使う。語彙とは開いたクラスの構成要素である。
- 折角色々考えたから残しておこうと思っただけで新規性なんか知らん。

# 命名

`！言語`（びっくりマーク言語）
`! Language`(Exclamation Mark Language)

文の中心となる動詞の末尾に常に`!`が付くため。

# 例文

日本語

- 吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪な種族であったそうだ。この書生というのは時々我々を捕えて煮て食うという話である。しかしその当時は何という考もなかったから別段恐しいとも思わなかった。

！言語

- 吾輩=>猫;名前:まだ\_ない!;{生まれる+た@場所-*}:とんと\_見当がつく+ない!;だけ\_{何でも\_ニャーニャー\_泣く+ている+た!@薄暗い\_(じめじめした\_所)}:記憶する+ている;吾輩.人間-もの:始めて\_見る+た!@ここ;しかも,そうだ\_{それ.書生-(人間中で一番獰悪_種族):である+た!}!<聞く@あと;=>{この\_書生-もの.我々:,時々,食う<煮る<捕える}-話;しかし,とも\_恐しい:別段\_思う+ない+た!^も\_(何という\_考):ない+た!@その\_当時

# ドキュメント

## Step1. 文字と発音

！言語ではASCII文字コードの記号と、それ以外の文字を使う。プログラミング言語の雰囲気を持つ為、記号の発音は定めない。

## Step2. 文の構造

### 一般動詞

- 例文：`猿が木から川に落ちる。`
- 訳文：`猿:落ちる!木->川`

この文は1個の動詞`落ちる`に`猿`・`木`・`川`という3個の名詞が結びついてできている。
！言語では動詞の後に`!`、主語の後に`:`、「AからBへ」という表現に`A->B`という記号を置く。！言語は文の構造を形作るための記号**トークン**と、記号でない部分**識別子**で構成される。
`猿が`や`落ちる`のような文を構成するパートを**項**と呼び、項の種類を表すトークンでない部分を**句**、名詞の句を**名詞句**、動詞の句を**動詞句**と呼ぶ。句の部分は何かしらの自然言語に依存する。注意点として、動詞句は他の項を含まず、飽くまで文を構成する項の一つである。項で構成されるものを**文**と呼ぶ。
動詞以外の項はすべて省略可能であり、`->`より前の項同士、後の項同士は順不同である。

- 例文：`木から川に落ちる。`
- 訳文：`落ちる!木->川`
- 例文：`猿が木から落ちる。`
- 訳文：`猿:落ちる!木->`
- 例文：`川に猿が落ちる。`
- 訳文：`落ちる!猿:->川`

項の種類を表すトークンは後置だけではなく、前置の場合もある。その場合、必ずトークン`->`よりも後に置く。

- 例文：`友達が明日やってくる。`
- 訳文：`友達:やってくる!@明日`

こうすることで句の間に必ず記号が入り込む形になり解析が可能になる。また、`->`の項自体も省略可能である。その場合は後置トークンと前置トークンがくっつく。

句は可能な限り！言語の文法に従って分解することが望ましいが、厳しい場合はそのまま記述してもよい。

- 例文：`彼の友達が明日やってくるらしい。`
- 訳文：`彼の友達:やってくるらしい!@明日`

この例文では`彼の友達`と`やってくるらしい`が複数の単語で構成されているが、ここではこの言葉の分解の方法を説明していないため、あえてこのまま記述する。`@`は時刻や場所を指定する項である。

### コピュラ

コピュラとは「～は～だ」のような文である。英語ではbe動詞を使うが、日本語では動詞が出てこないことがあるなど言語によって表現方式に差がある。

！言語ではトークン`=`の左右に名詞句を並べることでそれらが等しいことを表す。

- 例文：`彼は田中さんです。`
- 訳文：`彼=田中さん`

ただし、`=`を使ったコピュラ文は左右のものが置換可能であるという強い制約を発生させるので、ものの名前の定義などに使用する。すなわち代入である。
そうではなく「is」的なことを言いたい場合は`=>`を使う。

- 例文：`人間はいつかは死ぬ生き物だ。`
- 訳文：`人間=>いつかは死ぬ生き物`

これは「あらゆる`人間`は`いつかは死ぬ生き物`だ」という意味になり、逆の「あらゆる`いつかは死ぬ生き物`は`人間`だ」とはならない。`人間=いつかは死ぬ生き物`という表現は、「`いつかは死ぬ生き物`をここでは`人間`という名前で呼ぶ」という意味になるため、逆が成り立つ。

コピュラの主語も省略できる。形式主語は不要である。

- 例文：`雨だ。`
- 訳文：`=>雨`

### 自動詞と他動詞

！言語は「自動詞の主語と他動詞の目的語が同じように扱われ、他動詞の主語だけが別の扱いを受ける(Wikipedia)」能格言語である。

- 例文：`水が流れる。`
- 訳文：`水:流れる!`
- 例文：`私は水を流す。`
- 訳文：`私.水:流す!`

自動詞の主語と他動詞の目的語はトークン`:`を使い、他動詞の主語だけは`.`を使う。
これは次のようなほぼ同じ現象を近い表現で表すためである。

- 例文：`log.txt was removed.`
- 訳文：`removed!log.txt:`
- 例文：`I removed log.txt.`
- 訳文：`I.removed!log.txt:`

すなわち、`log.txt`がひとりでに消滅しようと誰かが削除しようと現象部分の表現は変わらないのである。また受動態も存在せず、原文で受動態の黒幕部分であった場所は`.`の項で表される。

- 例文：`log.txt was removed by me.`
- 訳文：`I.removed!log.txt:`

## Step3. 句の構造

句は修飾構造を持っている。例えば名詞を修飾する「AのB」という表現は`A_B`という記号で表す。これは同時に識別子の名前に`_`が使えないことも意味する。キャメルケースで書こう。

- 例文：`バリカンの旧友が尋ねてきた。`
- 訳文：`バリカン_旧友:尋ねてきた!`

修飾関係であれば何でも`_`で結合する。所有格や形容詞のほか、冠詞・副詞・前置詞・接続詞といったものも修飾関係とみなす。活用がある場合は、意味が変わらない範囲で最も辞書に乗りそうな形に直す。

- 例文：`あの人`
- 訳文：`あの_人`
- 例文：`素早く動く`
- 訳文：`素早く_動く`
- 例文：`走り終わった`
- 訳文：`走る_終わった`
- 例文：`走った後に座る`
- 訳文：`走った_後に_座る`

`_`を複数並べたときは左側から優先的に結合する。

- 例文：`崖の上のポニョ`
- 訳文：`崖_上_ポニョ`

`_`で区切られた部分を**語**と呼ぶ。`_`が1個もない場合はその句自体が1個の語である。

この例では`崖の上の`が一つの形容詞的な働きをしており、それが`ポニョ`に結合していると考えられるためこれでよい。
しかし右側を優先的に結合させたい場合は句を`(` `)`で囲むとそれを一つの語にすることができる。

- 例文：`私の赤い車`
- 訳文：`私_(赤い_車)`

「～だけ」「～も」というとりたての表現も修飾を使う。英語のonlyのような感じである。

- 例文：`私の車だけが盗まれた。`
- 訳文：`だけ_(私_車):盗まれた!`

## Step4. 語の構造

`_`だけですべての言葉を形態素レベルまで分解できるだろうか。例えば英語の`children`は`child`に複数形の`-s`が付いたものだが、これを`_`で結合すると英文では様々な個所に`(` `)`が出てきて面倒くさいし`s`ってなんだよ的な感じになる。

- 例文：`my children`
- 訳文：× `my_(s_child)`

なので、活用だけは特別扱いして別のより優先度の高いトークン`+`で結合することにする。

- 例文：`my children`
- 訳文：`my_child+s`

`+`の左辺には**因子**が、右辺には**活用**がきて、全体で語を成す。

活用は大抵単独では言葉にならないため、最も一般的な形を代表して活用の名前とする。例えば英語の複数形のsは`s`で複数形の活用、過去形はたとえ不規則であろうと`ed`で過去の活用である。日本語の場合も過去形は`た`である。

すると先に挙げた例文はこのように分解される。

- 例文：`バリカンの旧友が尋ねてきた。`
- 訳文：`バリカン_旧友:尋ねる_くる+た!`

`+`も複数結合できる。その場合は最も左以外の部分はすべて活用である。

- 例文：`彼は結局夕食を食べられなかった。`
- 訳文：`彼.夕食:結局_食べる+できる+ない+た。`

日本語のような膠着的な性質が強い言語ではしばしば`+`が何連にもなるが、語の中心的な部分は常に最も左側の因子である。

## Step5. 関係代名詞

関係代名詞は文を使った修飾である。修飾なのでトークン`_`の拡張的な文法である。

- 例文：`サメに食べられた魚`
- 訳文：`{サメ.食べる+される+た!*:}_魚`

`_`の左側に`{` `}`が現れた場合、その中は関係節である。そしてその中の`*`部分に当てはまるものという条件で`_`の右側を修飾する。
なぜ`*`による項の指定が必要なのだろうか。それは次の例文の曖昧さによる。

- 例文：`食べた魚はとても大きかった。`

これは`魚`が何かを食べたのを見て「何かを大きい魚が食べていた」と言いたいのか、先ほど大きな魚を食べたのを報告したいのかが不明である。すなわちこの文は`魚`が`食べた`の主語なのか目的語なのかが不明である。
！言語ではその曖昧さを解決するために関係節に句のプレースホルダ`*`が必須なのである。

関係節が`{*=>A}`の形である場合は`-`による特別な省略形が利用可能である。

- 例文：`私の友達である男`
- 訳文：`{*=>私_友達}_男`
- 訳文：`私_友達-男`

`A-B`で「AであるB」という修飾を行う。このトークンは`_`と同じ結合優先度である。

## Step6. 命令文・疑問文・感動文

命令文と疑問文はそれぞれトークン`!`・`?`を文頭に置くことで表現する。感動文とは特に情報を相手に伝えることを意図しない呟きである。感動文は文頭に`#`を置く。

- 例文：`私の靴を舐める。`
- 訳文：`私_靴:舐める!`
- 例文：`私の靴を舐めなさい。`
- 訳文：`!私_靴:舐める!`
- 例文：`私の靴を舐めますか。`
- 訳文：`?私_靴:舐める!`
- 例文：`私の靴を舐めるのですか。`
- 訳文：`#私_靴:舐める!`

疑問詞を使った疑問文は、聞きたい部分に疑問詞`*`を置くことで表現する。

- 例文：`私の何を舐めますか。`
- 訳文：`?私_*:舐める!`

疑問詞に範囲を設けたい場合は次のようにする。

- 例文：`いつ私の靴を舐めますか。`
- 訳文：`?私_靴:舐める!@時間-*`

## Step7. 文の名詞化

`{` `}`で囲むことで「～すること」という名詞句を作ることができる。

- 例文：`私の靴を舐めること`
- 訳文：`{私_靴:舐める!}`

疑問文を使って「～かどうか」「何が～か」という名詞句を作ることができる。

- 例文：`私の靴を舐めるかどうか`
- 訳文：`{?私_靴:舐める!}`
- 例文：`私の何を舐めるのか`
- 訳文：`{?私_*:舐める!}`

## Step8. 複文

複文は、複数の文で構成される言葉である。文の関係によっていくつかのパターンがある。複文のトークンはすべて項のトークンよりも結合優先度が低い。なお、単純な一つの文でも一つの文で構成される複文である。

### 条件

「AならばB」という関係を表したい場合はトークン`B?A`を使う。

- 例文：`明日雨だったら遠足は休みだ。`
- 　　＝`明日が雨であるならば明日の遠足は休みだ。`
- 訳文：`明日_遠足=>休み?明日=>雨`

時間などを指定する場合、原則として両方に付けなければならない。そのため、しばしば原文を整理する必要がある。

### 順序

「Aの後でB」「Aの前にB」という関係を表したい場合、それぞれトークン`B<A`・`B>A`を使う。

- 例文：`肉を切らせて骨を断つ。`
- 訳文：`肉:骨:断つ<切る+させる`
- 例文：`肉を切らせる前に骨を断つ。`
- 訳文：`肉:骨:断つ>切る+させる`

### 理由・原因

「AなのでB」という関係を表したい場合はトークン`B^A`を使う。

- 例文：`服が安いから買おう。`
- 訳文：`#買う+よう!^服=>安い`

## Step9. 話題化

話題化は複文の前に項を移動させることによって複文のすべての文にデフォルトで項を与える構文である。複文の前に移動した部分を**話題**と呼ぶ。話題と複文は`,`で区切る。`,`で構成される言葉を**行**と呼ぶ。

- 例文：`明日雨だったら遠足は休みだ。`
- 　　＝`明日、雨だったら遠足は休みだ。`
- 訳文：`@明日,遠足=>休み?=>雨`

単純な文に付けることもできる。

- 例文：`昨日バリカンの旧友が尋ねてきた。`
- 訳文：`@昨日,バリカン_旧友:尋ねる_くる+た!`

話題部分に項のトークンが無ければそれは副詞となる。すなわち、副詞を話題化するには副詞部分を前に出して`,`で区切ればよい。

- 例文：`結局、彼は夕食を食べられなかった。`
- 訳文：`結局,彼.夕食:食べる+できる+ない+た。`

## Step10. 文の接続詞

「しかし」や「よって」などを表すには話題化と同じく`,`の前に置く。先行する行がある場合は`;`で接続する。`;`は`,`よりも結合優先度が低い。`;`で結合された行全体を**段落**と呼ぶ。`;`による接続は、文の接続詞がなくてもよい。

- 例文：`バリカンに旧友なんていない。しかし昨日バリカンの旧友が尋ねてきた。`
- 訳文：`バリカン.旧友:持っている+ない!;しかし,@昨日,バリカン_旧友:尋ねる_くる+た!`

実は文の接続詞は副詞の話題化と同じである。

## Step11. 法

情報源や確実性などを表現するには動詞を修飾すればよいが、コピュラ文では動詞がないためそれができない。ここでは完成された文があった時に文にメタ的な情報を追加する方法を解説する。

- 例文：`そうだ村の村長さんがソーダ飲んで死んだそうだ`
- 訳文：`そうだ_{そうだ村_村長さん:,死ぬ+た!<ソーダ:飲む!}!`

文を`{` `}`で名詞化した後、それを`!`で動詞句として使うことができる。その動詞句に対して情報源を表す言葉を加えればよい。