/*
 * 形態素ライブラリ  V1.0
 *
 * 入力ファイルより文を読み込み、形態素解析を行う。
 *
 */

<文 #s (#y #t)>
	{#s
		<nop #p>
		(
		 <括弧 #p>
		|
		 <その他 #p>
		|
		 <格 #k #x>
		 <is #p (#k #x)>
		|
		 <助詞 #p>
		)
	}
	(
	  <述語 #y #t>
	 |
	  <* #y><is #t " ">
	)
	[
	 <括弧 #p>
	 {
		<* _>
	 }
	 <括弧 #p>
	]
	;


<助詞 (#s)>
	(
	  "は"
	| "が"
	| "の"
	| "を"
	| "に"
	| "も"
	| "へ"
	)
		<GETTOKEN #s>
		[
		    ","
		  | "、"
		  | "，"
		  | <SPACE>
		]
		;

<その他 (#s)>
		(
		   "万一"	
		 | "少なくとも"	
		 | "少しも"	
		 | "少くとも"	
		 | "何故なら"	
		 | "因みに"	
		 | "主には"	
		 | "主に"	
		 | "主として"	
		 | "実は"	
		 | "例えば"	
		 | "考えていた"	
		 | "考えて"	
		 | "よるが"	
		 | "よりますが"	
		 | "より"	
		 | "よもや"	
		 | "ようやく"	
		 | "もとに"	
		 | "もっとも"	
		 | "もちろん"	
		 | "もしくは"	
		 | "もし"	
		 | "もう"	
		 | "まるで"	
		 | "まだ"	
		 | "または"	
		 | "また"	
		 | "まさか"	
		 | "ならびに"	
		 | "なぜなら"	
		 | "なぜ"	
		 | "なかったことは"	
		 | "なかったと"	
		 | "ないと"	
		 | "なお"	
		 | "ないしは"	
		 | "どの"
		 | "ところで"	
		 | "ところが"	
		 | "どうすべきか"	
		 | "どうして"	
		 | "どうか"	
		 | "どういうわけか"	
		 | "というのは"	
		 | "でも"	
		 | "では"	
		 | "ちょうど"	
		 | "ちなみに"	
		 | "たとえば"	
		 | "だって"	
		 | "だったら"	
		 | "だけど"	
		 | "だが"	
		 | "だから"	
		 | "ただし"	
		 | "それまでも"	
		 | "それまで"	
		 | "それほど"	
		 | "それはそうと"	
		 | "それはさておき"	
		 | "それにもかかわらず"	
		 | "それにしては"	
		 | "それに"	
		 | "それなら"	
		 | "それなのに"	
		 | "それと共に"	
		 | "それとともに"	
		 | "それとも"	
		 | "それでも"	
		 | "それでは"	
		 | "それで"	
		 | "それぞれ"	
		 | "それじゃ"	
		 | "それが"	
		 | "それから"	
		 | "その結果"	
		 | "そのまま"	
		 | "そのまま"	
		 | "そのとき"	
		 | "そのために"	
		 | "そのため"	
		 | "そのうえで"	
		 | "そのうえ"	
		 | "その"	
		 | "そして"	
		 | "そこで"	
		 | "そうか"	
		 | "そういえば"	
		 | "ぜひ"	
		 | "すると"	
		 | "すべてが"	
		 | "じつは"	
		 | "しっかり"	
		 | "したがって"	
		 | "しかも"	
		 | "しかし"	
		 | "さらに"	
		 | "さて"	
		 | "さすが"	
		 | "このまま"	
		 | "このほど"	
		 | "このとき"	
		 | "この"	
		 | "こうしたことから"	
		 | "こう"	
		 | "けれども"	
		 | "けれど"	
		 | "けっして"	
		 | "きっと"	
		 | "かつてなく"	
		 | "かつてない"	
		 | "かつて"	
		 | "かつ"	
		 | "およびに"	
		 | "および"	
		 | "おそらく"	
		 | "あるいは"	
		 | "あのまま"	
		 | "あのとき"	
		 | "あの"	
		 | "あと"	
		 | "すべての"
		 | "全ての"
		)
				<GETTOKEN #s>
		[
		    ","
		  | "、"
		  | "，"
		  | <SPACE>
		]
		;

<格 #x #g>
	<* #x> 

	(
		  "等を"	
		| "等の"	
		| "等にも"	
		| "等"		
		| "をして"	
		| "を"		
		| "れ"		<NOTNEXTSTR "た">	
		| "よりも"	
		| "より"	
		| "ようにも"	
		| "ように"	
		| "や"		<NOTNEXTSTR "の">	
		| "ものは"	
		| "も"		
		| "までに"	
		| "まで"	
		| "ますが"	
		| "まして"	
		| "ましたが"	
		| "へは"	
		| "への"	
		| "へと"	
		| "へ"		
		| "ば"		
		| "は"		
		| "のものであり"	
		| "のも"	
		| "のみが"	
		| "のものは"	
		| "のものに"	
		| "のは"	
		| "のための"	
		| "のために"	
		| "のため"	
		| "のとおり"	
		| "のことと"	
		| "のある"		
		| "の"		<NOTNEXTSTR "も">
		| "によれば"	
		| "によると"	
		| "による"	
		| "により"	
		| "によって"	
		| "にも"	
		| "には"	
		| "になったことは"	
		| "になった"	
		| "にて"
		| "についても"	
		| "については"	
		| "についての"	
		| "について"	
		| "にくく"	
		| "にくいが"	
		| "にくい"	
		| "における"	
		| "に"		<NOTNEXTSTR "の">	
		| "なり得るのか"	
		| "なりうるのか"	
		| "なり得る"	
		| "なりうる"	
		| "なら"	
		| "なのですが"	
		| "なので"	
		| "なのだけれども"	
		| "なのだが"	
		| "なのだ"	
		| "などを"	
		| "などのための" 
		| "などの"	
		| "などにも"	
		| "などについては"	
		| "などでの"	
		| "などで"	
		| "などから"	
		| "など"	
		| "ないが"	
		| "な"		<NOTNEXTSTR "の"><NOTNEXTSTR "い">
				<NOTNEXTSTR "か"><NOTNEXTSTR "く">
		| "とも"	
		| "との"	
		| "とは"	
		| "となる"	
		| "となり"	
		| "となっているとのこと"
		| "となっているとの"
		| "となっている"
		| "となって"	
		| "とするのは"	
		| "とするが"	
		| "とする"	
		| "としては"	
		| "として"	
		| "とした"	
		| "とき"	
		| "といった"	
		| "というのは"	
		| "ということですので"	
		| "ということです"	
		| "ということ"	
		| "という"	
		| "と"		
		| "でも"	<NOTNEXTSTR "ら">	
		| "ではなく"	
		| "では"	
		| "での"	
		| "ですが"	
		| "でしたが"	
		| "できるようにも"
		| "できるように"
		| "できるよう"	
		| "できると"	
		| "できるのは"	
		| "できる"	
		| "でき"	
		| "である"	
		| "であり"	<NOTNEXTSTR "ま">
		| "で"		<NOTNEXTSTR "す">
		| "ても"
		| "つもりは"
		| "だけではなく" 
		| "だけでは" 
		| "だけでなく"	
		| "だが"	
		| "たら"	
		| "ための"	
		| "ために"	
		| "ため"	
		| "せ"		
		| "すれば"	
		| "するのは"
		| "するには"	
		| "するつもりは"
		| "することに"	
		| "するが"	
		| "する"	
		| "しようと"	
		| "しよう"	
		| "しなかったのは"	
		| "しないのは"	
		| "してもらい"	
		| "しても"	
		| "しては"	
		| "しており"	
		| "している"	
		| "していた"	
		| "していない"	
		| "していくという"　
		| "していく"	
		| "して"	
		| "したら"	
		| "したように"	
		| "したのに"	
		| "したので"	
		| "したが"	
		| "したい"	
		| "した"	
		| "されることに"	
		| "されては"	
		| "されているのか"	
		| "されている"	
		| "されて"	
		| "されたが"	
		| "された"	
		| "ことも"	
		| "ことは"	
		| "かけられた"	
		| "いるが"	
		| "があり"		<NOTNEXTSTR "ま">
		| "が"		
		| "からも"	
		| "からの"	
		| "から"	
		| "おり"	
		| "および"	
		| "る"		<NOTNEXTSTR "と"><NOTNEXTSTR "た"><NOTNEXTSTR "の"><NOTNEXTSTR "こ">
		| "め"		<NOTNEXTSTR "る"><NOTNEXTSTR "た">
				<NOTNEXTSTR "ら"><NOTNEXTSTR "て">
		| "ね"		
		| "て"		<NOTNEXTSTR "の">
		| "け"		<NOTNEXTSTR "た"><NOTNEXTSTR "な">
				<NOTNEXTSTR "の">	
		| "え"		<NOTNEXTSTR "る"><NOTNEXTSTR "に">
				<NOTNEXTSTR "た">
		| "?"		
		| "？"		
		| "!"		
		| "！"		
		| <NEXTSTR ",">	
		| <NEXTSTR "、"> 
		| <NEXTSTR "，"> 
		| <NEXTSTR "("> 
	  	| <NEXTSTR "（"> 
		| <NEXTSTR "「"> 
		| <NEXTSTR "『"> 
		| <NEXTSTR "["> 
		| <NEXTSTR "【"> 
		| <NEXTSTR "{"> 
		| <NEXTSTR ")"> 
		| <NEXTSTR "）">  
		| <NEXTSTR "」"> 
		| <NEXTSTR "』"> 
		| <NEXTSTR "]"> 
		| <NEXTSTR "】"> 
		| <NEXTSTR "}"> 
		| <NEXTSTR '"'> 
		| <NEXTSTR "'"> 
		| <NEXTSTR "”">
		| <NEXTSTR "“">
	)
		
		<NOTNEXTSTR "。">
		<NOTNEXTSTR ".">

 		<GETTOKEN #g>
	(
		  <eq #g "を"> [ "," | "、" | "，"]
		| ","
		| "、"
		| "，"
		| <SPACE>
		| (
		    ::sys <rightstr #rc #x 1>
		    <NEXTCHAR #lc>  
		   (
			(  ::sys <syntax #rc <NONRANGE _ "あ" "ん">>
		    	 | ::sys <syntax #lc <NONRANGE _ "あ" "ん">>
			)
		   )		  
		   <noteq #lc "ぁ">
		   <noteq #lc "ぃ">
		   <noteq #lc "ぅ">
		   <noteq #lc "ぇ">
		   <noteq #lc "ぉ">
		   //<noteq #lc "っ">
		   <noteq #lc "ゃ">
		   <noteq #lc "ゅ">
		   <noteq #lc "ょ">

		   <noteq #rc "な">
		   <noteq #rc "で">
		 )
	)
	;


	
<述語 #y #t>
	<* #y>
	(
	   "わ"
	 | "る"
	 | "らしかった"
	 | "らしい"
	 | "ようだった"
	 | "ようだ"
	 | "よ"
	 | "ゆ"
	 | "む"
	 | "あります"
	 | "ものです"
	 | "ものだ"
	 | "もの"
	 | "ます"
	 | "ありました"
	 | "ました"
	 | "まい"
	 | "ほしかった"
	 | "ほしい"
	 | "ふ"
	 | "の"
	 | "ね"
	 | "ぬ"
	 | "なる"
	 | "なった"
	 | "なかっただろう"
	 | "なかった"
	 | "なかった"
	 | "ないだろう"
	 | "ない"
	 | "ない"
	 | "な"
	 | "です"
	 | "でした"
	 | "できる"
	 | "できない"
	 | "である"
	 | "であった"
	 | "てみる"
	 | "てみた"
	 | "てある"
	 | "てあった"
	 | "つ"
	 | "だろう"
	 | "だれ"
	 | "だった"
	 | "だれ"
	 | "だ"
	 | "たかった"
	 | "たい"
	 | "た"
	 | "ぞ"
	 | "そうだった"
	 | "そうだ"
	 | "する"
	 | "す"
	 | "した"
	 | "される"
	 | "された"
	 | "さ"
	 | "ください"
	 | "く"
	 | "からだ"
	 | "か"
	 | "う"
	 | "る"
	 | "ました"
	 | "た"
	 | "い"
	 | "った"
	 | "?"
	 | "？"
	 | "."
	 | "。"
	 | "..."
	 | "……"
	 | "…"
	 | <SPACE>
	 | <CR>
	)
		<GETTOKEN #t>
	(
		  "?"
		| "？"
		| "."
		| "。"
		| "..."
		| "……"
		| "…"
		| <SPACE>
		| <CR>
		| <EOF>
	)
	;

<括弧 #g>
	(
	    "("
	  | "（"
	  | "「"
	  | "『"
	  | "【"
	  | "["
	  | "{"
	  | ")" 
	  | "）"  
	  | "」" 
	  | "』" 
	  | "】" 
	  | "]" 
	  | "}" 
	  | "'"
	  | '"'
	  | "”"
	  | "“"
	)
	<GETTOKEN #g>
	;

<読み込み>
	{ 
		::sys <getline #x 
			::sys <strdelcntl #y #x> 
			::sys <split #l #y "。">
			<foreach (#i #l)
				(
				   ::sys <syntax #i <NULLLINE>>
				 | 
				   <print ">" #i "。"><print>
				   ::sys <syntax ::sys<concat _ (#i "。")> 
					{<文 #a #b><print #a #b><print>}>
				)
			>>
	};
	
//? <読み込み>;


