Compare commits

...

2 Commits

3 changed files with 42 additions and 6 deletions

1
codego/.gitignore vendored
View File

@ -20,6 +20,5 @@
!/go.sum
## Für Erzeugung von Grammatiken:
!/grammars/antlr.jar
!/grammars/README.md
!/grammars/*.g4

View File

@ -12,7 +12,9 @@ Da ich kein Informatiker bin, sind auch einige Aspekt bestimmt nicht optimal pro
- bash (auch bash-for-windows).
- golang (mind. 1.6.x)
- Java11
Dieses Projekt macht von ANTLR4 Gebrauch, um Schemata in Lexer und Parser zu verwandeln. Siehe <https://blog.gopheracademy.com/advent-2017/parsing-with-antlr4-and-go/> für mehr Informationen dazu.
## Voreinstellungen ##
- In einer bash-console zu diesem Ordner navigieren und folgenden Befehl ausführen:
@ -21,7 +23,11 @@ Da ich kein Informatiker bin, sind auch einige Aspekt bestimmt nicht optimal pro
## oder
chmod +x *.sh
```
- In `run.sh` gibt es eine Zeile, die zur Kompilierung des Go-Projektes notwendigen Module über **go** installieren lässt. (Die Liste der Packages findet man in der Datei `requirements`). Diese Zeile kann man ruhig nach der ersten Ausführung rauskommentieren.
- In `run.sh` gibt es eine Zeile, die zur Kompilierung des Go-Projektes notwendigen Module über **go** installieren lässt.
(Die Liste der Packages findet man in der Datei `requirements`).
Diese Zeile kann man ruhig nach der ersten Ausführung rauskommentieren.
- Dazu kommt, dass **antlr4.jar** heruntergeladen wird.
Mithilfe dieses Java-Archivs werden aus `grammars/*.g4` go-Skripte für die Grammatik erzeugt.
## Daten ##
@ -37,6 +43,21 @@ go build main.go && ./main
```
ausführen.
Das bash Skript macht folgende Schritte
```bash
# installiert go-module (kann nach 1. Mal rauskommentiert werden):
check_requirements;
# lädt ggf. antlr.jar herunter (wenn fehlt), mit dem die Grammatiken erzeugt werden (kann nach 1. Mal rauskommentiert werden):
precompile_grammars;
# kompiliert Go-Projekt (nach jeder Code-Änderung erneut nötig), sonst rauskommentieren:
compile_programme;
# führt kompiliertes Programm auf Daten in data.env aus:
run_programme;
```
## Offene Challenges ##
In der Datei `aussagenlogik/rekursion.go` (relativ zu diesem Ordner) findet man mehrere leere Methoden (mit dem Kommentar `// Herausforderung...`). Wer es mag, kann versuchen, an seinem Rechner diese Methoden zu definieren und auszuprobieren.

View File

@ -8,10 +8,25 @@
# HILFSMETHODEN
################################
export NULL="/dev/null"
export ANTLR_VESION="4.7";
function call_go() {
go $@;
}
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.";
mv "$fname" "grammars/antlr.jar"
break
fi
done <<< "$( ls antlr*.jar )"
}
function check_requirements() {
[ -f "go.sum" ] && rm "go.sum";
call_go get "$( cat requirements )";
@ -20,14 +35,15 @@ function check_requirements() {
function precompile_grammars() {
local fname;
local name;
pushd grammars >> /dev/null;
! [ -f "grammars/antlr.jar" ] && get_antlr; # <- lädt antl.jar herunter, wenn fehlt
pushd grammars >> $NULL;
while read fname; do
( [ "$fname" == "" ] || ! [ -f "$fname" ] ) && continue;
name="$( echo "$fname" | sed -E "s/^(.*)\.g4$/\1/g" )";
echo -e "\033[92;1mANTLR4\033[0m präkompiliert Grammatik \033[1m${fname}\033[0m";
echo -e "\033[92;1mANTLR\033[0m präkompiliert Grammatik \033[1m${fname}\033[0m";
java -jar antlr.jar -Dlanguage=Go "$fname" -o "$name";
done <<< "$( ls *.g4 2> /dev/null )"
popd >> /dev/null
done <<< "$( ls *.g4 2> $NULL )"
popd >> $NULL;
}
function compile_programme() {