Skip to content

Instantly share code, notes, and snippets.

View swsnr's full-sized avatar
✌️
Hapaschnapapopapapapa

Sebastian Wiesner swsnr

✌️
Hapaschnapapopapapapa
View GitHub Profile
@dwijnand
dwijnand / reload.sbt
Last active October 6, 2017 07:25
Stick it in ~/.sbt/0.13/reload.sbt
def buildFiles(b: File) = ((b * "*.sbt") +++ ((b / "project") ** ("*.scala" | "*.sbt")) filter (_.isFile))
def genBuildFilesHashesAt(base: File) = buildFiles(base).get.map(f => f -> (Hash toHex Hash(f))).toMap
def genBuildFilesHashes(units: Map[URI, LoadedBuildUnit]) =
(units.values flatMap (_.defined) map (_._2.base) flatMap genBuildFilesHashesAt).toMap.##
val buildFilesHashes = settingKey[Int]("") in Global
buildFilesHashes := genBuildFilesHashes(loadedBuild.value.units)
shellPrompt in Global := (s =>
@yoshuawuyts
yoshuawuyts / .profile
Created April 6, 2016 03:29 — forked from bmhatfield/.profile
Automatic Git commit signing with GPG on OSX
# In order for gpg to find gpg-agent, gpg-agent must be running, and there must be an env
# variable pointing GPG to the gpg-agent socket. This little script, which must be sourced
# in your shell's init script (ie, .bash_profile, .zshrc, whatever), will either start
# gpg-agent or set up the GPG_AGENT_INFO variable if it's already running.
# Add the following to your shell init to set up gpg-agent automatically for every shell
if [ -f ~/.gnupg/.gpg-agent-info ] && [ -n "$(pgrep gpg-agent)" ]; then
source ~/.gnupg/.gpg-agent-info
export GPG_AGENT_INFO
else
@sma
sma / gist:760937
Created December 31, 2010 11:08
Ein Python-Interpreter in Python

Neulich habe ich gezeigt, wie ein Python-Interpreter in Java aussehen könnte, der entweder als rekursiver AST-Interpreter für einen als Java-Objekte vorliegenden abstrakten Syntaxbaum (AST) oder als virtuelle Maschine für einen aus dem abstrakten Syntaxbaum abgeleiteten Maschinencode realisiert ist.

Heute möchte ich zeigen, wie man ein Python-Programm in einen AST übersetzen kann. Dies mache ich in Python. Dann kann sich das Programm selbst in einen AST übersetzen und wenn ich aus dem AST -- ebenfalls in Python -- einen Maschinencode erzeuge, brauche ich "nur noch" einen Interpreter für die virtuelle Maschine in der Zielsprache (z.B. Java) und habe dann einen vollständigen Python-Interpreter.

So der Plan.

Zerlegen in Wörter

Der Übersetzer, der aus einem Python-Programm einen AST erzeugt, geht in zwei Schnitten vor. Zuerst soll das als String vorliegende Programm in Wörter (sogenannte Token) erlegt werden. Dann analysiere ich die Liste der Token von links nach rechts mit Hilfe eines reku

@sma
sma / gist:738236
Created December 12, 2010 18:48
Wie man einen Python-Interpreter in Java entwickeln kann

Ein Python-Interpreter

Dieser Text beschreibt theoretische Überlegungen, Python-Programme in Java zu präsentieren, um sie dann auszuführen. Auf welche Weise der Python-Quelltext übersetzt wird, ist nicht wichtig, nur das man zu jedem Python-Teilprogramm eindeutig ein Exemplar einer Java-Klasse zuordnen kann. Um den syntaktischen Ballast von Java zu reduzieren, lasse ich, wo nicht weiter wichtig, alle Sichtbarkeitsmodifikatoren und die offensichtlichen Konstruktoren zur Initialisierung der aufgeführten Exemplarvariablen weg.

Ich übersetze ein Python-Programm in zwei Arten von AST-Knoten:

abstract class Stmt {
    abstract void exec(Frame f);
}