次の DCG を PROLOG の通常の限定節にどのように翻訳しますか?
expr_regular --> cor_ini,numero,guion,numero,cor_fin.
cor_ini --> ['['].
numero --> ['0'];['1'];['2'];['3'];['4'];['5'];['6'];['7'];['8'];['9'].
cor_fin --> [']'].
guion --> ['-'].
編集: DCG を通常の PROLOG 句に変換したいのは、同じコードで DCG と通常の句の両方を使用できないためです (私の場合)。私はこの2つのコードを持っています:
ピース1:
traducir(Xs, Ys) :- maplist(traduccion, Xs, Ys).
traduccion('^',comeza_por).
traduccion('[',inicio_rango).
traduccion('0',cero).
traduccion('-',a).
traduccion('9',nove).
traduccion(']',fin_rango).
使用方法の例は次のとおりです。
?- traducir(['[','0','-','9',']'],[]).
true .
そしてPiece2:
traducir--> cor_ini,numero,guion,numero,cor_fin.
cor_ini --> ['['].
numero --> ['0'];['1'];['2'];['3'];['4'];['5'];['6'];['7'];['8'];['9'].
cor_fin --> [']'].
guion --> ['-'].
使用方法の例は次のとおりです。
traducir(['^','[','0','-','9',']'],X).
X = [comeza_por, inicio_rango, cero, a, nove, fin_rango].
両方のコードを 1 つに結合して、traducir が適切に記述されているかどうか (DCG に従っている場合) をテストし、入力した内容をテキストに変換したいので、最終的なプログラムは次のことを実行できるはずです。
?- traducir(['^','[','0','-','9',']'],X).
X = [comeza_por, inicio_rango, cero, a, nove, fin_rango].
?- traducir(['[','0','-','9',']'],[]).
true .