mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-14 13:23:53 +00:00
72 lines
2.1 KiB
Bash
72 lines
2.1 KiB
Bash
#! /bin/sh
|
||
# @configure_input@
|
||
#---------------------------------------------------------------------------#
|
||
# Copyright (C) 1995-1996 The University of Melbourne.
|
||
# This file may only be copied under the terms of the GNU General
|
||
# Public License - see the file COPYING in the Mercury distribution.
|
||
#---------------------------------------------------------------------------#
|
||
#
|
||
# This sed script is used to convert from Mercury to Sicstus Prolog
|
||
# It does three things: delete the `:- module' line,
|
||
# expand backslash escapes, and replace the use
|
||
# of `^' for xor in calls to is/2 with `#'.
|
||
# The expansion of backslash escapes includes support for
|
||
# "\c" line continuation sequences, whereby the sequence
|
||
# backslash, "c", whitespace
|
||
# acts merely as layout text and is deleted from string literals;
|
||
# this allows string literals to extend over multiple lines, as in
|
||
# X = "foo\c
|
||
# bar".
|
||
# which is the same as X = "foobar".
|
||
|
||
# The commands for expanding \c are a bit complicated;
|
||
# here's an explanation.
|
||
#
|
||
# % this is the start of loop
|
||
# :l
|
||
# % if we see \c followed by any number of
|
||
# % spaces, tabs, or embedded newlines (\n), and then finally
|
||
# % followed by a non-embedded newline ($), we use the `N'
|
||
# % command to read in the next line; we then branch to
|
||
# % label `l' to start the loop again.
|
||
# /\\c\( * *\n*\)*$/{
|
||
# N
|
||
# b l
|
||
# }
|
||
# % at this point, we've read in all the lines of the \c
|
||
# % command, so we replace the \c followed by any number of
|
||
# % spaces, tabs, or embedded newlines (\n) with an empty
|
||
# % string.
|
||
# %
|
||
# /\\c\( * *\n*\)*/s///g
|
||
|
||
for file in "$@"; do
|
||
case $file in
|
||
*.m) base=`basename "$file" .m` ;;
|
||
*.nl) base=`basename "$file" .nl` ;;
|
||
*) base=`basename "$file"` ;;
|
||
esac
|
||
# see comments above for explanation of this `sed' command
|
||
sed -e '
|
||
/ is /s/\^/#/g
|
||
/^:- *module/d
|
||
/^[ ]*%/s/.*//
|
||
/\\\\/s//\\/g
|
||
/\\a/s///g
|
||
/\\b/s///g
|
||
/\\r/s//
|
||
/g
|
||
/\\f/s///g
|
||
/\\t/s// /g
|
||
/\\n/s//\
|
||
/g
|
||
/\\v/s///g
|
||
:l
|
||
/\\c\( * *\n*\)*$/{
|
||
N
|
||
b l
|
||
}
|
||
/\\c\( * *\n*\)*/s///g
|
||
' "$file" > "$base".pl
|
||
# see comments above for explanation of this `sed' command
|
||
done
|