add Slash to linguist

This commit is contained in:
Charlie Somerville
2013-07-17 01:51:34 -07:00
parent 904e86d901
commit 43f4f5bd32
2 changed files with 132 additions and 0 deletions

View File

@@ -1204,6 +1204,11 @@ Shell:
extensions: extensions:
- .tmux - .tmux
Slash:
type: programming
color: "#007eff"
primary_extension: .sl
Smalltalk: Smalltalk:
type: programming type: programming
color: "#596706" color: "#596706"

127
samples/Slash/brainfuck.sl Normal file
View File

@@ -0,0 +1,127 @@
<%
class Env {
def init {
@memory = [];
@ptr = 0;
}
def ptr { @ptr }
def ptr=(ptr) { @ptr = ptr }
def current_value { @memory[@ptr] || 0 }
def current_value=(value) { @memory[@ptr] = value }
}
class AST {
class Next {
def eval(env) {
env.ptr++;
}
}
class Prev {
def eval(env) {
env.ptr--;
}
}
class Inc {
def eval(env) {
env.current_value++;
}
}
class Dec {
def eval(env) {
env.current_value--;
}
}
class Output {
def eval(env) {
print(env.current_value.char);
}
}
class Input {
def eval(env) {
...
}
}
class Sequence {
def init(nodes) {
@nodes = nodes;
}
def eval(env) {
for node in @nodes {
node.eval(env);
}
}
}
class Loop {
def init(seq) {
@seq = seq;
}
def eval(env) {
while env.current_value != 0 {
@seq.eval(env);
}
}
}
}
class Parser {
def init(str) {
@chars = str.split("");
}
def parse {
@stack = [[]];
for char in @chars {
_parse_char(char);
}
if @stack.length != 1 {
throw SyntaxError.new("unexpected end of input");
}
AST::Sequence.new(@stack.last);
}
def _parse_char(char) {
switch char {
">" { _add(AST::Next.new); }
"<" { _add(AST::Prev.new); }
"+" { _add(AST::Inc.new); }
"-" { _add(AST::Dec.new); }
"." { _add(AST::Output.new); }
"," { _add(AST::Input.new); }
"[" { _open_loop(); }
"]" { _close_loop(); }
}
}
def _add(node) {
@stack.last.push(node);
}
def _open_loop {
@stack.push([]);
}
def _close_loop {
if @stack.length == 1 {
throw SyntaxError.new("unexpected ']'");
}
nodes = @stack.pop;
_add(AST::Loop.new(AST::Sequence.new(nodes)));
}
}
src = File.read(ARGV.first);
ast = Parser.new(src).parse;
ast.eval(Env.new);