C1R Implementation

From Rosetta Code
Revision as of 00:03, 21 November 2011 by rosettacode>André van Delft (Initial version)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
C1R Implementation is an implementation of C1R. Other implementations of C1R.

c1r is the implementation for the C1R language on Unix machines; porting to Windows and other platforms should be fairly easy.

In fact c1r is a simple shell script that efficiently uses the already available C compiler named cc: <lang c>#! /bin/bash

  1. C1R compiler
  1. remove HTML tags, but replace "
    " by newlines

function removeHTMLtags() {

sed -e 's~
~\

~g' | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' }

  1. unescape HTML codes: replace "<" by "<" etc

function unescapeHTML() {

sed -e 's/&lt\;/</g;s/&gt\;/>/g;s/&nbsp\;/ /g;s/&quot\;/"/g;s/&#40\;/(/g;s/&#41\;/)/g;s/&#91\;/[/g;s/&#93\;/]/g;s/&#123\;/{/g;s/&#125\;/}/g'

}

FILENAME=$1

if [ -z ${FILENAME} ] then

 echo "Usage: $0 <fileName>"
 exit 1

fi

FILENAME1=${FILENAME}.c ROSETTAURL=rosettacode.org/wiki WORDCOUNT=`cat $FILENAME|wc -l`

cp ${FILENAME} ${FILENAME1}

if [ $WORDCOUNT -eq 1 ] then

 PAGEURL=$ROSETTAURL/`cat $FILENAME`

curl $PAGEURL 2>/dev/null | grep -m 1 "

" | removeHTMLtags | unescapeHTML >${FILENAME1}
fi

cc $FILENAME1
</lang>

A typical test session would look like:
<lang bash>
$ echo Hello_world/Text >hw.c1r
$ ./c1r hw.c1r
$ ./a.out
Goodbye, World!
</lang>