You selected nihongo.pl

/*  Parsing Japanese Sentence by Prolog  */
% Prologでかんたんな日本語文を構文解析するプログラムです。
% nihongo.pl 
% date: 2009 Oct 1
% file format: UTF-8
% test: SWI-Prolog 5.6.52

:- op(800, xfy, 'が').% :- op(800, yfx, 'が').  %
:- op(800, xfy, 'は'). %:- op(800, yfx, 'は').  %

:- op(800, yf, 'です。').
:- op(800, yf, 'ではありません。').
:- op(700, xfx, 'の').
:- op(700, xfx, 'で').
:- op(700, xfx, 'に').
:- op(700, xfx, 'と').
%:- op(900, xf, '。').

s( 1, '太郎' 'は' '学生' 'です。').
s( 2, '太郎' 'は' '妹' 'が' '学生' 'です。').
s( 3, ('タマ' 'は' ('猫' 'です。'))).
s( 4, 'タマ' 'は' ('学生' 'ではありません。')).
s( 5, '花子' 'は' ('女性' 'です。')).
s( 6, ('花子' 'は' ('猫' 'が' '好き' 'ではありません。'))).
s( 7, '太郎' 'は' ('花子' 'が' (' 好み' 'の' '女性') 'です。')).
s( 8, 'ゾウ' 'は' 'ハナ' 'が' ' 長い。').
s( 9, ('ゾウ' 'は' 'ハナ') 'が' ' 長い。').
s( 10, ('ゾウ' 'の' 'ハナ') 'が' ' 長い。').
s( 11, ('ゾウ' 'の' 'ハナ') 'は' ' 長い。').
s( 12, 'ゾウ' 'の' ('ハナ' 'は' ' 長い。')).
s( 13, 'ゾウ' 'は' ('ハナ' 'が' ' 長い。')).
s( 14, 'ゾウ' 'の' 'ハナ' 'は' ' 長い。').
s( 15, '太郎' 'は' ('花子' 'が' (' 好み' 'の' '男性') 'です。')).
s( 16, '太郎' 'は' (('花子' 'が' ' 好み') 'の' '男性') 'です。')).
%

/*

% がとは、共にxfyの場合
:- op(800, xfy, 'が').
:- op(800, xfy, 'は').

ERROR: d:/pl/gofai/nihongo.pl:34:0: Syntax error: Illegal start of term

34: s( 16, '太郎' 'は' (('花子' 'が' ' 好み') 'の' '男性') 'です。')).

127 ?- s(N,I),nl,write(N:I),fail.

1: (太郎 は 学生 です。)
2: (太郎 は 妹 が 学生 です。)
3: (タマ は 猫 です。)
4: (タマ は 学生 ではありません。)
5: (花子 は 女性 です。)
6: (花子 は 猫 が 好き ではありません。)
7: (太郎 は 花子 が 好み の 女性 です。)
8: (ゾウ は ハナ が 長い。)
9: ((ゾウ は ハナ)が 長い。)
10: (ゾウ の ハナ が 長い。)
11: (ゾウ の ハナ は 長い。)
12: (ゾウ の (ハナ は 長い。))
13: (ゾウ は ハナ が 長い。)
14: (ゾウ の ハナ は 長い。)
15: (太郎 は 花子 が 好み の 男性 です。)
false.


% がとは、共にyfxの場合
:- op(800, yfx, 'が').
:- op(800, yfx, 'は').

85 ?- [nihongo].
ERROR: d:/pl/gofai/nihongo.pl:19:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:20:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:25:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:33:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:34:0: Syntax error: Operator priority clash
% nihongo compiled 0.00 sec, 36 bytes
true.

19: s( 1, '太郎' 'は' '学生' 'です。').
20: s( 2, '太郎' 'は' '妹' 'が' '学生' 'です。').
25: s( 7, '太郎' 'は' ('花子' 'が' (' 好み' 'の' '女性') 'です。')).
33: s( 15, '太郎' 'は' ('花子' 'が' (' 好み' 'の' '男性') 'です。')).
34: s( 16, '太郎' 'は' (('花子' 'が' ' 好み') 'の' '男性') 'です。')).

97 ?- s(N,I),nl,write(N:I),fail.

3: (タマ は (猫 です。))
4: (タマ は (学生 ではありません。))
5: (花子 は (女性 です。))
6: (花子 は (猫 が 好き ではありません。))
8: (ゾウ は ハナ が 長い。)
9: (ゾウ は ハナ が 長い。)
10: (ゾウ の ハナ が 長い。)
11: (ゾウ の ハナ は 長い。)
12: (ゾウ の (ハナ は 長い。))
13: (ゾウ は (ハナ が 長い。))
14: (ゾウ の ハナ は 長い。)
false.


% はのみyfx
:- op(800, yfx, 'は').
:- op(800, xfy, 'が').

 ?- [nihongo].
ERROR: d:/pl/gofai/nihongo.pl:19:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:20:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:26:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:34:0: Syntax error: Operator priority clash
% nihongo compiled 0.02 sec, 144 bytes
true.

19: s( 1, '太郎' 'は' '学生' 'です。').
20: s( 2, '太郎' 'は' '妹' 'が' '学生' 'です。').
26: s( 8, 'ゾウ' 'は' 'ハナ' 'が' ' 長い。').
34: s( 16, '太郎' 'は' (('花子' 'が' ' 好み') 'の' '男性') 'です。')).

112 ?- s(N,I),nl,write(N:I),fail.

3: (タマ は (猫 です。))
4: (タマ は (学生 ではありません。))
5: (花子 は (女性 です。))
6: (花子 は (猫 が 好き ではありません。))
7: (太郎 は (花子 が 好み の 女性 です。))
9: ((ゾウ は ハナ)が 長い。)
10: ((ゾウ の ハナ)が 長い。)
11: (ゾウ の ハナ は 長い。)
12: (ゾウ の (ハナ は 長い。))
13: (ゾウ は (ハナ が 長い。))
14: (ゾウ の ハナ は 長い。)
15: (太郎 は (花子 が 好み の 男性 です。))
false.

% がのみyfx
:- op(800, yfx, 'が').
:- op(800, xfy, 'は').

ERROR: d:/pl/gofai/nihongo.pl:20:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:25:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:33:0: Syntax error: Operator priority clash
ERROR: d:/pl/gofai/nihongo.pl:34:0: Syntax error: Illegal start of term
% nihongo compiled 0.02 sec, -12 bytes

1: (太郎 は 学生 です。)
3: (タマ は 猫 です。)
4: (タマ は 学生 ではありません。)
5: (花子 は 女性 です。)
6: (花子 は 猫 が 好き ではありません。)
8: (ゾウ は ハナ が 長い。)
9: (ゾウ は ハナ が 長い。)
10: (ゾウ の ハナ が 長い。)
11: ((ゾウ の ハナ)は 長い。)
12: (ゾウ の (ハナ は 長い。))
13: (ゾウ は ハナ が 長い。)
14: (ゾウ の ハナ は 長い。)
false.

% if op(700, xfx, 'の') 's priority level is depreciated to 800
% then 14th (ゾウ の ハナ は 長い。) (line 32) is no longer valid.

ERROR: d:/pl/gofai/nihongo.pl:32:0: Syntax error: Operator priority clash

*/
 
% 以下 bun1.pl (2008)から修正して引用
% なおbun1.plはbun.pl (2006)をUTF-8 で保存しなおしたものです。

/*  Japanese Sentence Generation 日本語文生成プログラム  */
% Prologでかんたんな日本語文を生成するプログラムです。

sentence(S):-'文'(S).

'文'(S):- '名詞'(N), '動詞'(V), S = (N 'が' V ).
'文'(S):- '名詞'(N), '動詞句'(VP), S = (N 'が' VP).
'文'(S):- '名詞句'(NP), '動詞句'(VP), S = (NP 'が' VP).

'動詞句'(VP):- '名詞'(L, '場所'), '動詞'(V), VP = (L 'で' V).
'動詞句'(VP):- '副詞'(ADV), '動詞'(V), VP = (ADV 'と' V).
'名詞句'(NP):- '形容詞'(AD), '名詞'(N), NP = (AD - N).

'動詞'('寝ている。').
'動詞'('歩いている。').

'名詞'('たろう').
'名詞'('じろう').
'名詞'('ベッド','場所').
'名詞'('公園','場所').

'副詞'('ゆっくり').
'副詞'('きびきび').

'形容詞'('疲れた').
'形容詞'('元気のいい').

%

return to front page.