#! /bin/bash

# SELVA phrase preprocessor
# Last edited on 2004-12-30 23:14:50 by stolfi

uso="${0##*/} PDIR"

# Script para:
#   dado um texto de entrada escrito em portugues,
#   gera o grafo de entrada para o analisador sintático 
#   SELVA.
#
# O parametro {PDIR} 'e o nome do diretório que 
# contém o arquivo de entrada "{PDIR}/phrase.txt"
# e onde será colocado o grafo resultante "{PDIR}/phrase.phr".

# ----------------------------------------------------------------------
# PARAMETROS

if [ "$#" -ne 1 ]; then echo "uso: ${uso}"; exit 1; fi

# Nome da  gramatica
pdir="$1"; shift;

# ----------------------------------------------------------------------
# Diretórios constantes

# Caminho completo do dicionario lexico
# lex="/home-ext/msc2000/ra880518/parser/dic/lex.dic"
lex="${STOLFIHOME}/projects/port-syntax/TMP/lucien/lex.dic"

# Caminho completo do dicionario morfologico
morf="/home/msc2000/ra880518/parser/dic/clises.mrf"
# morf="${STOLFIHOME}/projects/port-syntax/TMP/lucien/morf.mrf"

# Diretorio das tabelas de classes
tablesdir="/home/msc2000/ra880518/parser/tabelas/"

# Diretorio das ferramentas
toolsdir="${STOLFIHOME}/programs/c/SELVA/ppp/"
export PATH="${PATH}:${toolsdir}"

# ----------------------------------------------------------------------
# Diretórios específicos para cada texto

# Caminho completo do dicionario complementar
extralex="${pdir}lex-extra.dic"

# Diretorio dos arquivos de entrada
indir="${pdir}/"

# Diretorio dos arquivos de saida
outdir="${pdir}/"

# Diretorio dos arquivos intermediarios gerados
tmpdir="${pdir}/"

# arquivos de ferramentas utilizados:
#   check-lex-format
#   text2word
#   word2arc
#   deduce-numbers
#   deduce-clises
#   remove-comments
#   exclude-wrong-class
#   deduce-others
#   expand-contractions

# dicionarios utilizados:
#   ${lex}
#   ${morf}

# tabelas de conversao utilizadas
#   conv-categ-names.tbn
#   categories.tbc

# dicionario complementar (entrada e saida):
#   lex-extra.dic

# arquivos de entrada:
#   phrase.txt

# arquivos de saida:
#   phrase.phr 

# arquivos intermediarios gerados ou possivel de ser gerado:
#   wrong-lex-extra.err
#       words-pnt.lst (possivel)
#   arcs.tb1
#       sorted-by-end-node-arcs.tb1 (possivel)
#       words-seq.lst (possivel)
#   corpus.lst
#   corpus-delimited.lst
#       found-in-lex-delimited.dic (possivel)
#   found-in-lex.dic
#   deduced-numbers.dic
#   supposed-clises.tc1
#	delimited-conjug.ls2 (possivel)
#   sorted-delimited-conjug.ls2
#	found-conjug-delimited.dic (possivel)
#   found-conjug.dic
#	delimited-clitics.ls2 (possivel)
#   sorted-delimited-clitics.ls2
#	found-clitics-delimited.dic (possivel)
#   found-clitics.mrf
#	sorted-by-verb-supposed-clises.tc1 (possivel)
#	verb-supposed-clises.tc2 (possivel)
#	sorted-verb-supposed-clises.tc2 (possivel)
#	deduced-clises.tc3 (possivel)
#	sorted-deduced-clises.tc3 (possivel)
#   deduced-clises.dic
#	lex-extra-cr-rm.dic (possivel)
#       lex-extra-delimited.dic (possivel)
#       found-in-lex-extra-delimited.dic (possivel)
#   found-in-lex-extra.dic
#   found.dic
#       sorted-by-word-arcs.tb1 (possivel)
#       augmented.tb2 (possivel)
#	sorted-to-exclude.tb2 (possivel)
#   compacted.tb2
#       notclassified-lines.lst (possivel)
#   missing-words.lst
#       compacted-sorted-by-source.tb2 (possivel)
#       joined-by-source-word.dic (possivel)
#       possible-noun-adj-names.dic (possivel)
#       noun-adj-names.dic (possivel)
#       sorted-by-class-names.dic (possivel)
#   deduced-names.dic
#       deduced-names.lst (possivel)
#       missing-words2.lst (possivel)
#       deduced-others.dic (possivel)
#   lex-extra.dic
#       expanded.tb3 (possivel)
#	unique-expanded.tb3 (possivel)
#       sorted-by-class-expanded.tb3 (possivel)
#       graph.tb4 (possivel)
#   phrase.phr

# Formatacao dos arquivos pela extensao, especificando seus campos:
#
# txt:
#   texto da lingua portuguesa
#
# err:
#   1. mensagem de erro
#
# lst:
#   1. palavra
#
# ls2:
#   1. palavra
#   2. padrao de formato da classe procurada
#
# dic:
#   1. palavra
#   2. classe codificada
#   3. canonica mista (palavra ou contracao)
#      sendo a contracao no formato (dic;dic) ou (dic;dic;dic)
#      onde dic e' composto dos seguintes campos separados por vírgula:
#        1. palavra
#        2. classe codificada
#        3. canonica pura (palavra)
#
# mrf:
#   1. morfema
#   2. classe do morfema
#   3. contracao no formato (dic) ou (dic;dic)
#      onde dic e' composto dos seguintes campos separados por vírgula:
#        1. palavra
#        2. classe codificada da palavra
#        3. canonica pura (palavra)
#
# tbc:
#   1. classe codificada
#   2. nome da classe para o prolog
#   3. tracos da classe separados por virgula (ex.: masc,pl)
#
# tbn:
#   1. classe codificada de substantivo ou adjetivo
#   2. classe codificada de substantivo nome proprio
#
# tb1:
#   1. no' inicial
#   2. no' final
#   3. palavra convertida
#   4. palavra original (Maiuscula se vinda no inicio de uma frase)
#   5. marcacao da palavra convertida, da palavra original e do seu posicionamento na frase,
#      sendo da forma abc onde:
#        a - palavra convertida e' minuscula (m) ou maiuscula (M)
#        b - palavra original e' minuscula (m) ou maiuscula (M)
#        c - posicionamento na frase e' inicio (i) ou meio (m)
#
# tb2:
#   1. no' inicial
#   2. no' final
#   3. palavra convertida
#   4. palavra original (Maiuscula se vinda no inicio de uma frase)
#   5. marcacao da palavra convertida, da palavra original e do seu posicionamento na frase,
#   6. classe codificada
#   7. canonica mista (palavra ou contracao)
#
# tb3:
#   1. no' inicial
#   2. no' final
#   3. palavra convertida
#   4. classe codificada
#   5. canonica pura (palavra)
#
# tb4:
#   1. nome da classe para o prolog
#   2. no' inicial
#   3. no' final
#   4. palavra convertida
#   5. canonica pura (palavra)
#   6. tracos da classe separados por virgula (ex.: masc,pl)
#
# tc1:
#   1. palavra convertida
#   2. classe codificada da palavra: enclise(en) ou mesoclise(me)
#   3. palavra (verbo)
#   4. padrao de formato da classe da palavra (verbo) procurada
#   5. morfema (clitico pronominal)
#   6. padrao de formato da classe do morfema (clitico pronominal) procurado
#
# tc2:
#   1. palavra convertida
#   2. classe codificada da palavra: enclise(en) ou mesoclise(me)
#   3. palavra (verbo)
#   4. classe da palavra (verbo)
#   5. canonica da palavra (verbo)
#   6. morfema (clitico pronominal)
#   7. padrao de formato da classe do morfema (clitico pronominal) procurado
#
# tc3:
#   1. palavra convertida
#   2. classe codificada da palavra: enclise(en) ou mesoclise(me)
#   3. palavra (verbo)
#   4. classe da palavra (verbo)
#   5. canonica da palavra (verbo)
#   6. morfema (clitico pronominal)
#   7. classe do morfema (clitico pronominal)
#   8. canonica do morfema (clitico pronominal)
#
# phr: 
#      Arcos do grafo no formato de entrada do parser SELVA: Para cada
#      palavra da frase (depois da expansão de contrações) são geradas
#      duas linhas no formato "{INDEX} {ORG} {DEST}
#      {SIMBOLO}({TRACOS}) {PALAV}" onde {ORG} e {DEST} são os
#      extremos do arco e {PALAV} é a palavra (com caixa normalizada).
#      
#      Na primera das duas linhas, {SYMBOL} é apenas a {CLASSE} da palavra;
#      na segunda linha, {SYMBOL} é "{CLASSE}_{CANON}" onde {CANON} é
#      a forma canonica pura. P. ex. "gatos" vira "subst(mas,plu)" e
#      "subst_gato(mas,plu)".

# PROGRAMA DO SCRIPT # 

echo "gramatica `date +'%Y-%m-%d-%H%M%S' -r ${gram}` ${gram}" > /dev/stderr
echo "script    `date +'%Y-%m-%d-%H%M%S' -r $0` $0"  > /dev/stderr
echo " " > /dev/stderr

echo "etapa 04 - cria arquivo de dicionario extra"
# gera o arquivo do dicionario extra se inexistente
if [ ! -e ${extralex} ]; then
  touch ${extralex}
fi

echo "etapa 05 - verifica permissao de escrita para dicionario extra"
# se o arquivo do dicionario extra nao tem permissao de escrita, sai do script
if [ ! -w ${extralex} ]; then
  echo "Dicionario complementar 'lex-extra' sem permissao de escrita. Programa abortado" \
    > "/dev/stderr"
  exit 1
fi

echo "etapa 06 - checa formato do dicionario extra"
# renomeia dicionario extra ->lex-extra.dic~~
# verifica se o formato do dicionario extra esta correto ->wrong-lex-extra.err
# remove antigo dicionario extra ->lex-extra.dic
mv ${extralex} ${extralex}~~
gawk -f ${toolsdir}check-lex-format \
  ${tablesdir}categories.tbc ${extralex}~~ \
  > ${extralex} \
  2> ${tmpdir}wrong-lex-extra.err
rm ${extralex}~~

echo "etapa 07 - verifica se houve erros no formato do dicionario extra"
# se o formato nao esta correto, sai do script
if [ -s ${tmpdir}wrong-lex-extra.err ]; then
  echo "Dicionario complementar 'lex-extra' em formato incorreto. Programa abortado" \
    > "/dev/stderr"
  exit 1
fi

echo "etapa 08 - converte um texto em uma lista de arcos"
# converte um texto em uma lista sequencial das palavras do texto e ->words-pnt.lst
# converte a lista de palavras em uma lista de arcos ->arcs.tb1
#   onde pode haver mais de uma linha (palavra convertida) para a mesma palavra original
gawk -f ${toolsdir}text2word < ${indir}phrase.txt \
  | gawk -f ${toolsdir}word2arc -v arqarcos="${tmpdir}big-arcs.plb" \
  > ${tmpdir}arcs.tb1

echo "etapa 09 - obtem o numero do ultimo nó"
# ordena os arcos pelo no' final ->sorted-by-end-node-arcs.tb1
# obtem o numero do ultimo no' ->last-node.pln
lastarc=( `sort -k 2,2n ${tmpdir}arcs.tb1 | tail -1` )
NN="${lastarc[1]}"
echo "NN = ${NN}"

echo "etapa 10 - extrai lista de palavras dos arcos"
# extrai a lista de palavras dos arcos e ->words-seq.lst
# ordena a lista de palavras excluindo repeticoes ->corpus.lst
awk '{printf("%s\n", $3)}' < ${tmpdir}arcs.tb1 \
  | sort -u > ${tmpdir}corpus.lst

echo "etapa 11 - delimita palavras do corpus com asterisco"
# delimita as palavras do corpus com asterisco ->corpus-delimited.lst
awk '{printf("*%s*\n", $0)}' < ${tmpdir}corpus.lst > ${tmpdir}corpus-delimited.lst

echo "etapa 12 - obtem o dicionario das palavras encontradas"
# procura as palavras do corpus no dicionario e ->found-in-lex-delimited.dic
# retira a delimitacao de asterisco das palavras encontradas ->found-in-lex.dic
fgrep -f ${tmpdir}corpus-delimited.lst ${lex} \
  | sed -e 's/[*]//g' \
  > ${tmpdir}found-in-lex.dic

echo "etapa 13 - deduz dicionario dos codigos"
# deduz lexico de numeros e codigos presentes no corpus ->deduced-numbers.dic
gawk -f ${toolsdir}deduce-numbers < ${tmpdir}corpus.lst \
  > ${tmpdir}deduced-numbers.dic

echo "etapa 14 - gera hipoteses de todas as possiveis enclises e mesoclises"
# gera hipoteses de todas as possiveis enclises e mesoclises presentes no corpus 
#   -> supposed-clises.tc1
gawk -f ${toolsdir}deduce-clises < ${tmpdir}corpus.lst \
  > ${tmpdir}supposed-clises.tc1

echo "etapa 15 - extrai conjugacoes de verbos das possiveis enclises e mesoclises"
# extrai e delimita as conjucacoes de verbos com asterisco e -> delimited-conjug.ls2
# ordena a lista de conjugacoes de verbos excluindo repeticoes -> sorted-delimited-conjug.ls2
awk '{printf("*%s* %s\n", $3, $4)}' < ${tmpdir}supposed-clises.tc1 \
  | sort -u \
  > ${tmpdir}sorted-delimited-conjug.ls2

echo "etapa 16 - obtem classificacao dos verbos das possiveis enclises e mesoclises"
# procura as conjugacoes dos verbos das possiveis enclises e mesoclises no dicionario lexico e -> found-conjug-delimited.dic
# retira a delimitacao de asterisco dos verbos encontrados ->found-conjug.dic
fgrep -f ${tmpdir}sorted-delimited-conjug.ls2 ${lex} \
  | sed -e 's/[*]//g' \
  > ${tmpdir}found-conjug.dic

echo "etapa 17 - extrai cliticos pronominais das possiveis enclises e mesoclises"
# extrai e delimita os cliticos pronominais com asterisco e -> delimited-clitics.ls2
# ordena a lista de cliticos pronominais excluindo repeticoes -> sorted-delimited-clitics.ls2
awk '{printf("*%s* %s\n", $5, $6)}' < ${tmpdir}supposed-clises.tc1 \
  | sort -u \
  > ${tmpdir}sorted-delimited-clitics.ls2

echo "etapa 18 - obtem classificacao dos cliticos pronominais das possiveis enclises e mesoclises"
# procura os cliticos pronominais das possiveis enclises e mesoclises no dicionario morfologico e -> found-clitics-delimited.dic
# retira a delimitacao de asterisco dos cliticos pronominais encontrados ->found-clitics.mrf
fgrep -f ${tmpdir}sorted-delimited-clitics.ls2 ${morf} \
  | sed -e 's/[*]//g' \
  > ${tmpdir}found-clitics.mrf

echo "etapa 19 - deduz dicionario das enclises e mesoclises encontradas"
# ordena a lista de hipoteses pelo verbo -> sorted-by-verb-supposed-clises.tc1
# faz a juncao das hipoteses com a classificacao lexica encontrada para os verbos -> verb-supposed-clises.tc2
# ordena o resultado obtido (hipoteses com classificacao do verbo) pelo clitico pronominal -> sorted-verb-supposed-clises.tc2
# faz a juncao das hipoteses com a classificacao morfologica encontrada para os cliticos pronominais -> deduced-clises.tc3
# ordena o resultado obtido (hipoteses com classificacao do verbo e do clitico pronominal) pela palavra -> sorted-deduced-clises.tc3
# formata o resultado com enclises e mesoclises como um dicionario -> deduced-clises.dic
sort -k 3,3 ${tmpdir}supposed-clises.tc1 \
  | join -1 3 -2 1 -o 1.1,1.2,0,2.2,2.3,1.5,1.6 - ${tmpdir}found-conjug.dic \
  | sort -k 6,6 \
  | join -1 6 -2 1 -o 1.1,1.2,1.3,1.4,1.5,0,2.2,2.3 - ${tmpdir}found-clitics.mrf \
  | sort \
  | awk '{printf("%s %s (%s,%s,$s;%s\n", $1, $2, $3, $4, $5, substr($8,2))}' \
  > ${tmpdir}deduced-clises.dic

echo "etapa 20 - obtem dicionario de palavras encontradas no dicionario extra"
# remove carriage return, linhas em branco e comentarios do dicionario extra, ->lex-extra-cr-rm.dic
# delimita as palavras com classificacao do dicionario extra com asterisco, ->lex-extra-delimited.dic
# procura as palavras do corpus no dicionario extra ->found-in-lex-extra-delimited.dic
# retira a delimitacao de asterisco das palavras encontradas ->found-in-lex-extra.dic
gawk -f ${toolsdir}remove-comments < ${extralex} \
  | awk '(NF == 3) {printf("*%s* %s %s\n", $1,$2,$3)}' \
  | fgrep -f ${tmpdir}corpus-delimited.lst \
  | sed 's/[*]//g' \
  > ${tmpdir}found-in-lex-extra.dic

echo "etapa 21 - une os dicionarios obtidos "
# une os corpus encontrados, ordenando e eliminando ->found.dic
#   duplicacoes (caso o dicionario extra contenha lexico presente no dicionario normal)
sort -u \
  ${tmpdir}found-in-lex.dic \
  ${tmpdir}deduced-numbers.dic \
  ${tmpdir}deduced-clises.dic \
  ${tmpdir}found-in-lex-extra.dic \
  > ${tmpdir}found.dic

echo "etapa 22 - obtem os arcos com classificacao de dicionario "
# ordena a lista de arcos pelo campo de palavra (convertida) ->sorted-by-word-arcs.tb1
# faz a juncao dos arcos contendo as palavras com a classificacao lexica encontrada ->augmented.tb2
# ordena inversamente para os arcos que ligam o mesmo no' ficarem juntos ->sorted-to-exclude.tb2
#   e para as nao capitalizadas virem antes permitindo ao programa awk 
#   tratar as capitalizadas de acordo com o lexico encontrado para as nao capitalizadas para o mesmo no'
# exclui classificacoes improprias como: ->compacted.tb2
#   Pronomes, verbos e outros classificados como nome proprio quando iniciando uma frase
#   Palavras descapitalizadas sem classificacao derivadas de nomes proprios
#   Nomes proprios classificados como pronomes, verbos e outros (nao subst nem adj) quando nao iniciando uma frase
sort -k 3,3 ${tmpdir}arcs.tb1 \
  | join -a 1 -1 3 -2 1 -o 1.1,1.2,0,1.4,1.5,2.2,2.3 - ${tmpdir}found.dic \
  | sort -r \
  | gawk -f ${toolsdir}exclude-wrong-class \
  > ${tmpdir}compacted.tb2

echo "etapa 23 - obtem a lista de palavras nao encontradas "
# seleciona as palavras para as quais nao foram encontradas classificacoes ->notclassified-lines.lst
# ordena e retira duplicacoes das palavras ->missing-words.lst
awk '(NF == 5) {printf("%s\n",$3)}' < ${tmpdir}compacted.tb2 \
  | sort -u \
  > ${tmpdir}missing-words.lst

echo "etapa 24 - verifica se existe alguma palavra nao encontrada nos dicionarios "
# verifica se ha alguma palavra sem classificacao encontrada
if [ -s ${tmpdir}missing-words.lst ]; then
  echo "Há palavras sem classificação encontrada." \
  > "/dev/stderr";

  echo "etapa 25a - deduz nomes proprios de palavras nao encontradas a partir de substantivos e adjetivos"
  # ordena o grafo compactado pelo campo de palavra original para poder executar o join sobre esse campo ->compacted-sorted-by-source.tb2
  # deduz nomes proprios se encontrar seus respectivos nao capitalizados classificados como substantivo ou adjetivo ->joined-by-source-word.dic
  # retira duplicacoes de classificacao ->possible-noun-adj-names.dic
  # filtra o resultado selecionando aqueles que tem classificacao e que seja substantivo ou adjetivo ->noun-adj-names.dic
  # ordena os nomes pela classe ->sorted-by-class-names.dic
  # substitui a classe substantivo ou adjetivo pela respectiva classe de substantivo nome proprio ->deduced-names.dic
  sort -k 4,4 ${tmpdir}compacted.tb2 > ${tmpdir}compacted-sorted-by-source.tb2
  join -1 1 -2 4 -o 0,2.6,2.7 ${tmpdir}missing-words.lst ${tmpdir}compacted-sorted-by-source.tb2 > ${tmpdir}joined-by-source-word.dic
  cat ${tmpdir}joined-by-source-word.dic  | sort -u > ${tmpdir}possible-noun-adj-names.dic
  cat ${tmpdir}possible-noun-adj-names.dic  | egrep -e '[ ]((aj...)|(sb...))[ ]' > ${tmpdir}noun-adj-names.dic
  cat ${tmpdir}noun-adj-names.dic  | sort -k 2,2 > ${tmpdir}sorted-by-class-names.dic
  cat ${tmpdir}sorted-by-class-names.dic  | join -1 2 -2 1 -o 1.1,2.2,1.3 - ${tablesdir}conv-categ-names.tbn \
  > ${tmpdir}deduced-names.dic 
#  sort -k 4,4 ${tmpdir}compacted.tb2 > ${tmpdir}compacted-sorted-by-source.tb2
#  join -1 1 -2 4 -o 0,2.6,2.7 ${tmpdir}missing-words.lst ${tmpdir}compacted-sorted-by-source.tb2 \
#    | sort -u \
#    | egrep -e '[ ]((aj...)|(sb...))[ ]' \
#    | sort -k 2,2 \
#    | join -1 2 -2 1 -o 1.1,2.2,1.3 - ${tablesdir}conv-categ-names.tbn > ${tmpdir}deduced-names.dic 

  echo "etapa 26a - deduz siglas e outros nomes proprios adicionando-os ao dicionario extra "
  # renomeia dicionario extra ->lex-extra.dic~~
  # seleciona os nomes deduzidos provenientes de adjetivo e substantivo ->deduced-names.lst
  # seleciona palavras faltantes sem a deducao dos nomes classificados como adjetivo ou substantivo ->missing-words2.lst
  # deduz nomes proprios faltantes e siglas ->deduced-others.dic
  # adiciona os nomes proprios deduzidos e os nomes proprios faltantes ao arquivo lex-extra.dic ->lex-extra.dic
  # remove antigo dicionario extra ->lex-extra.dic
  mv ${extralex} ${extralex}~~
  awk '{printf("%s\n",$1)}' < ${tmpdir}deduced-names.dic \
    | comm -23 ${tmpdir}missing-words.lst - \
    | gawk -f ${toolsdir}deduce-others \
    | sort -u ${tmpdir}deduced-names.dic - ${extralex}~~ \
    > ${extralex}
  rm ${extralex}~~

else

  echo "etapa 25 - gera o grafo"
  # expande as contracoes ->expanded.tb3
  # retira duplicidade gerada na expansao de contracoes (ex. verbo-lhe-os, verbo-lhes-os) ->unique-expanded.tb3
  # ordena pelo campo classe da palavra ->sorted-by-class-expanded.tb3
  # substitui o codigo da categoria pelo nome e seus parametros ->graph.tb5
  # formata cada arco no formato exigido pelo parser ->phrase.phr
  gawk -f ${toolsdir}expand-contractions < ${tmpdir}compacted.tb2 > ${tmpdir}expanded.tb3
  cat ${tmpdir}expanded.tb3 \
    | sort -u \
    | sort -k 4,4 \
    | join -1 4 -2 1 -o 2.2,1.1,1.2,1.3,1.5,2.3 - ${tablesdir}categories.tbc \
    > ${tmpdir}graph.tb5
  NA="`cat ${tmpdir}graph.tb5 | wc -l`"
  echo "NA = ${NA}"
  cat ${tmpdir}graph.tb5 \
    | sort -b +1 -3n \
    | gawk \
        -v NN="${NN}" -v NA="${NA}" \
        ' BEGIN { \
            printf "begin phrase (format of 2004-11-01)\n"; \
            printf "nodes = %d\n", NN; \
            printf "arcs = %d\n", NA; \
            ia = 0; \
          } \
          //{ \
            gsub(/[*]$/,""); \
            cl=$1; o=$2; d=$3; pal=$4; can=$5; tr=$6; \
            sy = ( cl "(" tr ")" ); syc = ( cl "_" can "(" tr ")" ); \
            ia++; \
            printf "%3d: %3d %3d %-40s %s\n", ia, o, d, sy, pal; \
          } \
          END { \
             printf "end phrase\n" \
          } \
        ' \
    > ${tmpdir}phrase.phr

  # echo "etapa 26 - compoe todo o arquivo do programa prolog"
  # une os arquivos do analisador, da gramatica, do numero do ultimo no e do grafo ->program.pl
  # cat ${parser} ${gram} ${tmpdir}last-node.pln ${tmpdir}phrase.phr ${tmpdir}big-arcs.plb ${tmpdir}model.plm > ${tmpdir}program.pl
fi

echo "fim da execucao"

