2021-05-09 18:22:12 +02:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
################################################################################################
|
2021-05-09 20:24:18 +02:00
|
|
|
# NOTE: `chmod +x build.sh` vorher ausführen, um dieses Skript benutzen zu können.
|
2021-05-09 18:22:12 +02:00
|
|
|
################################################################################################
|
|
|
|
|
|
|
|
################################
|
|
|
|
# HILFSMETHODEN
|
|
|
|
################################
|
|
|
|
|
2021-05-09 20:15:23 +02:00
|
|
|
export NULL="/dev/null"
|
|
|
|
export ANTLR_VESION="4.7";
|
|
|
|
|
2021-05-09 18:22:12 +02:00
|
|
|
function call_go() {
|
|
|
|
go $@;
|
|
|
|
}
|
|
|
|
|
2021-05-09 20:24:18 +02:00
|
|
|
function check_requirements() {
|
2021-05-10 14:32:52 +02:00
|
|
|
call_go get "$( cat scripts/requirements )";
|
2021-05-09 20:24:18 +02:00
|
|
|
}
|
|
|
|
|
2021-05-09 20:15:23 +02:00
|
|
|
function get_antlr() {
|
|
|
|
local url="http://www.antlr.org/download/antlr-${ANTLR_VESION}-complete.jar";
|
|
|
|
( wget $url ) >> $NULL 2> $NULL || (echo -e "[\033[91;1mERROR\033[0m] konnte \033[1;2mwget $url\033[0m nicht ausführen." && exit 1);
|
|
|
|
while read fname; do
|
|
|
|
if ! [ "$fname" == "" ] && [ -f "$fname" ]; then
|
|
|
|
echo -e "\033[92;1mANTLR\033[1m-${ANTLR_VESION}\033[0m wurde heruntergeladen und in \033[1mcodego/grammars\033[0m kopiert.";
|
2021-05-09 20:24:18 +02:00
|
|
|
mv "$fname" "grammars/antlr.jar";
|
|
|
|
break;
|
2021-05-09 20:15:23 +02:00
|
|
|
fi
|
|
|
|
done <<< "$( ls antlr*.jar )"
|
|
|
|
}
|
|
|
|
|
2021-05-09 18:22:12 +02:00
|
|
|
function precompile_grammars() {
|
|
|
|
local fname;
|
|
|
|
local name;
|
2021-05-09 20:15:23 +02:00
|
|
|
! [ -f "grammars/antlr.jar" ] && get_antlr; # <- lädt antl.jar herunter, wenn fehlt
|
|
|
|
pushd grammars >> $NULL;
|
2021-05-10 14:32:52 +02:00
|
|
|
rm -rf .antlr; # <- wird automatisch erzeugt, aber wir brauche dies nicht
|
2021-05-09 18:22:12 +02:00
|
|
|
while read fname; do
|
|
|
|
( [ "$fname" == "" ] || ! [ -f "$fname" ] ) && continue;
|
|
|
|
name="$( echo "$fname" | sed -E "s/^(.*)\.g4$/\1/g" )";
|
2021-05-09 20:15:23 +02:00
|
|
|
echo -e "\033[92;1mANTLR\033[0m präkompiliert Grammatik \033[1m${fname}\033[0m";
|
2021-05-09 18:22:12 +02:00
|
|
|
java -jar antlr.jar -Dlanguage=Go "$fname" -o "$name";
|
2021-05-09 20:15:23 +02:00
|
|
|
done <<< "$( ls *.g4 2> $NULL )"
|
|
|
|
popd >> $NULL;
|
2021-05-09 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function compile_programme() {
|
2021-05-14 16:57:25 +02:00
|
|
|
[ -f "dist/main" ] && rm "dist/main";
|
2021-05-09 18:22:12 +02:00
|
|
|
echo -e "\033[92;1mGO\033[0m kompiliert \033[1mmain.go\033[0m";
|
2021-05-14 16:57:25 +02:00
|
|
|
call_go build -o dist/main "main.go";
|
|
|
|
! [ -f "dist/main" ] && exit 1;
|
2021-05-09 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function run_programme() {
|
|
|
|
echo -e "\033[92;1mGO\033[0m kompiliertes Programm wird ausgeführt";
|
2021-05-10 14:32:52 +02:00
|
|
|
./dist/main;
|
2021-05-09 18:22:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
################################
|
|
|
|
# HAUPTVORGÄNGE
|
|
|
|
################################
|
|
|
|
|
|
|
|
# Kann auskommentiert werden, wenn nötige Module schon installiert:
|
|
|
|
check_requirements;
|
|
|
|
|
|
|
|
# Code als Programm kompilieren und ausführen:
|
2021-05-14 18:35:06 +02:00
|
|
|
precompile_grammars;
|
2021-05-09 18:22:12 +02:00
|
|
|
compile_programme;
|
|
|
|
run_programme;
|