Initial import of files for generating Doxygen documentation.
[ohcount] / src / parsers / compile
1 #!/bin/sh
2 # Compiles all .rl files for Ohcount.
3 # Written by Mitchell Foral. mitchell<att>caladbolg<dott>net.
4
5 for file in *.rl
6 do
7   echo "Compiling $file"
8   if [ -z "`grep '#EMBED' $file`" ]
9   then
10     # no embedded language
11     ragel $file -o "`cut -d '.' -f1 <<< "$file"`.h"
12   else
13     # embedded language(s)
14     elangs=`grep -o "#EMBED([a-z_]\+)" $file | 
15       sed -e 's/#EMBED(\([a-z_]\+\))/\1/'`
16
17     # embed all languages into this temporary file to be compiled
18     parser=${file}.tmp
19
20     # grab all lines before #EMBED statements
21     e_line=`grep -n -m 1 "#EMBED([a-z_]\+)" $file | cut -d ':' -f1`
22     sed -n -e "1,$e_line p" $file > $parser
23
24     # embed each language in the temporary file
25     for lang in $elangs
26     do
27       echo -e "}%%\n%%{\n" >> $parser
28
29       e_parser=${lang}.rl
30       # extract the embedded language contents for embedding
31       s_line=`grep -n "^%%{" $e_parser | cut -d ':' -f1`
32       e_line=`grep -n "^}%%" $e_parser | cut -d ':' -f1`
33       s_line=`expr $s_line + 1`
34       e_line=`expr $e_line - 1`
35       sed -n "$s_line,$e_line p;" $e_parser |
36         sed -e "s/^[ \t]*machine[^;]\+;//;
37                 s/^[ \t]*write[^;]\+;//;
38                 s/^[ \t]*include[^;]\+;//;" >> $parser
39     done
40
41     # grab all lines after #EMBED statements
42     s_line=`grep -n "#EMBED([a-z_]\+)" $file | cut -d ':' -f1 | sort -r |
43       grep -m 1 "^[0-9]\+"`
44     sed -n -e "$s_line,$ p" $file >> $parser
45
46     ragel $parser -o "`cut -d '.' -f1 <<< "$file"`.h"
47     rm $parser
48   fi
49 done