Compare commits
2 Commits
fa286a6335
...
05ed3cf6c9
Author | SHA1 | Date | |
---|---|---|---|
05ed3cf6c9 | |||
56a0770ecb |
1
codego/.gitignore
vendored
1
codego/.gitignore
vendored
@ -20,6 +20,5 @@
|
||||
!/go.sum
|
||||
|
||||
## Für Erzeugung von Grammatiken:
|
||||
!/grammars/antlr.jar
|
||||
!/grammars/README.md
|
||||
!/grammars/*.g4
|
||||
|
@ -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.
|
||||
|
@ -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() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user