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
|
!/go.sum
|
||||||
|
|
||||||
## Für Erzeugung von Grammatiken:
|
## Für Erzeugung von Grammatiken:
|
||||||
!/grammars/antlr.jar
|
|
||||||
!/grammars/README.md
|
!/grammars/README.md
|
||||||
!/grammars/*.g4
|
!/grammars/*.g4
|
||||||
|
@ -12,7 +12,9 @@ Da ich kein Informatiker bin, sind auch einige Aspekt bestimmt nicht optimal pro
|
|||||||
|
|
||||||
- bash (auch bash-for-windows).
|
- bash (auch bash-for-windows).
|
||||||
- golang (mind. 1.6.x)
|
- 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 ##
|
## Voreinstellungen ##
|
||||||
|
|
||||||
- In einer bash-console zu diesem Ordner navigieren und folgenden Befehl ausführen:
|
- 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
|
## oder
|
||||||
chmod +x *.sh
|
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 ##
|
## Daten ##
|
||||||
|
|
||||||
@ -37,6 +43,21 @@ go build main.go && ./main
|
|||||||
```
|
```
|
||||||
ausführen.
|
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 ##
|
## 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.
|
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
|
# HILFSMETHODEN
|
||||||
################################
|
################################
|
||||||
|
|
||||||
|
export NULL="/dev/null"
|
||||||
|
export ANTLR_VESION="4.7";
|
||||||
|
|
||||||
function call_go() {
|
function call_go() {
|
||||||
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() {
|
function check_requirements() {
|
||||||
[ -f "go.sum" ] && rm "go.sum";
|
[ -f "go.sum" ] && rm "go.sum";
|
||||||
call_go get "$( cat requirements )";
|
call_go get "$( cat requirements )";
|
||||||
@ -20,14 +35,15 @@ function check_requirements() {
|
|||||||
function precompile_grammars() {
|
function precompile_grammars() {
|
||||||
local fname;
|
local fname;
|
||||||
local name;
|
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
|
while read fname; do
|
||||||
( [ "$fname" == "" ] || ! [ -f "$fname" ] ) && continue;
|
( [ "$fname" == "" ] || ! [ -f "$fname" ] ) && continue;
|
||||||
name="$( echo "$fname" | sed -E "s/^(.*)\.g4$/\1/g" )";
|
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";
|
java -jar antlr.jar -Dlanguage=Go "$fname" -o "$name";
|
||||||
done <<< "$( ls *.g4 2> /dev/null )"
|
done <<< "$( ls *.g4 2> $NULL )"
|
||||||
popd >> /dev/null
|
popd >> $NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
function compile_programme() {
|
function compile_programme() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user