Skip to content

Commit f484318

Browse files
committed
first running version
1 parent 03d202a commit f484318

File tree

7 files changed

+210
-0
lines changed

7 files changed

+210
-0
lines changed

Diff for: README.md

+28
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,30 @@
11
# um
22
An esoteric programming language made up of common English fillers
3+
4+
Version: 0.1
5+
6+
## About um
7+
um is derived from brainfuck and has the following equivalence with brainfuck operators:
8+
9+
> um
10+
< uh
11+
+ er
12+
- ah
13+
. ok
14+
, so
15+
[ well
16+
] like
17+
18+
19+
## um ... Hello World!
20+
er er er er er er er er er er well um er er er er er er er um er er er er er er er er er er um er er er um er uh uh uh uh ah like um er er ok um er ok er er er er er er er ok ok er er er ok um er er ok uh uh er er er er er er er er er er er er er er er ok um ok er er er ok ah ah ah ah ah ah ok ah ah ah ah ah ah ah ah ok um er ok um ok
21+
22+
23+
## Running um
24+
$ javac Um.java
25+
$ java Um examples/helloworld.um
26+
27+
28+
## Todo
29+
* Better exception handling
30+
* Better documentation

Diff for: ROT13.um

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
er well so er well ah well um er um er uh uh ah like um well uh er um ah like er um um er er er er er er er er well uh ah ah ah ah ah ah ah ah um ah like uh ah well uh well ah like um um um er well uh er uh er um um ah like uh well um er uh ah like uh well uh er er um um um er well uh er uh ah um um ah like uh well um er uh ah like like um well uh like uh like um um well ah like uh uh uh well well ah like uh well um um er um er uh uh uh ah like um um well uh uh er um um ah like um um er er er er er er er er well uh ah ah ah ah ah ah ah ah um ah like uh ah um um er er er er well uh er er er er er er er er um ah like uh ah uh well um um um er uh uh well um er um well ah like uh uh ah like um well uh er um ah like um well uh uh uh uh uh er um um um um er er er er well uh er er er er er er er er um ah like um ah like uh uh ah uh ah like um well uh uh uh uh well ah like um um um um well uh uh uh uh ah um um um um ah like like uh uh er er er er well uh uh er er er er er er er er um um ah like uh uh ah well um um er um er uh uh uh ah like um um well uh uh er um um ah like er um um er er er er er well uh ah ah ah ah ah um ah like uh ah well uh well ah like um um um er well uh er uh ah um um ah like uh well um er uh ah like uh well uh er er um um um er well uh er uh er um um ah like uh well um er uh ah like like um well uh like uh like um um well ah like uh uh uh well well ah like uh uh well um um er um er uh uh uh ah like um um well uh uh er um um ah like er um ah ah ah ah ah ah ah ah ah ah ah ah well uh well ah like um um um er well uh er uh ah um um ah like uh well um er uh ah like uh well uh er er um um um er well uh er uh er um um ah like uh well um er uh ah like like um well uh like uh like um um well ah like uh uh uh uh uh ah ah ah ah ah ah ah ah ah ah ah ah ah um um well well ah like er er er er er well uh uh er er er er er um um ah like uh uh er um um like uh well um er er er er well uh uh er er er er er er er er um um ah like uh ah like um like uh well ah like er er er er er er er er well uh er er er er er er er er um ah like uh er um like uh ok well ah like er um um er uh like um well well ah like uh like uh like

Diff for: Um.class

3.56 KB
Binary file not shown.

Diff for: Um.java

+169
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
import java.io.BufferedReader;
2+
import java.io.FileReader;
3+
import java.io.IOException;
4+
import java.util.ArrayList;
5+
6+
public class Um {
7+
8+
private int[] circularTape;
9+
private int tapeLocation;
10+
private final int tapeSize = 65535;
11+
12+
13+
public Um() {
14+
this.circularTape = new int[tapeSize];
15+
this.tapeLocation = 0;
16+
}
17+
18+
19+
private static StringBuffer readFile(String fileName) {
20+
StringBuffer lines = new StringBuffer();
21+
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
22+
String currentLine;
23+
24+
while ((currentLine = br.readLine()) != null) {
25+
lines.append(currentLine);
26+
lines.append("\n");
27+
}
28+
}
29+
catch (IOException e) {
30+
e.printStackTrace();
31+
}
32+
33+
return lines;
34+
}
35+
36+
37+
private static String trim(StringBuffer fileContent) {
38+
String content = fileContent.toString();
39+
return content.trim().toLowerCase();
40+
}
41+
42+
43+
private static String[] getTokens(String sourceCode) {
44+
String[] cleanedCode = sourceCode.split("\\s+");
45+
String[] tokens = tokenize(cleanedCode).toArray(new String[0]);
46+
return tokens;
47+
}
48+
49+
50+
private static ArrayList<String> tokenize(String[] code) {
51+
int numTokens = code.length;
52+
ArrayList<String> tokenized = new ArrayList<String>();
53+
54+
for (int i = 0; i < numTokens; i++) {
55+
if (isValidFiller(code[i])) {
56+
tokenized.add(code[i]);
57+
}
58+
}
59+
60+
return tokenized;
61+
}
62+
63+
64+
private static boolean isValidFiller(String word) {
65+
boolean isValid = false;
66+
switch(word) {
67+
case "um":
68+
case "uh":
69+
case "er":
70+
case "ah":
71+
case "ok":
72+
case "so":
73+
case "well":
74+
case "like":
75+
isValid = true;
76+
break;
77+
default:
78+
isValid = false;
79+
}
80+
81+
return isValid;
82+
}
83+
84+
85+
public String[] readProgram(String fileName) {
86+
StringBuffer fileContent = readFile(fileName);
87+
String trimmedContent = trim(fileContent);
88+
String[] tokens = getTokens(trimmedContent);
89+
return tokens;
90+
}
91+
92+
93+
public void eval(String[] tokens) {
94+
int numTokens = tokens.length;
95+
int loop = 0;
96+
97+
try {
98+
for (int i = 0; i < numTokens; i++) {
99+
switch(tokens[i]) {
100+
101+
case "um":
102+
this.tapeLocation++;
103+
break;
104+
105+
case "uh":
106+
this.tapeLocation--;
107+
break;
108+
109+
case "er":
110+
this.circularTape[this.tapeLocation]++;
111+
break;
112+
113+
case "ah":
114+
this.circularTape[this.tapeLocation]--;
115+
break;
116+
117+
case "ok":
118+
System.out.print((char)this.circularTape[this.tapeLocation]);
119+
break;
120+
121+
case "so":
122+
this.circularTape[this.tapeLocation] = (int) System.in.read();
123+
break;
124+
125+
case "well":
126+
if (this.circularTape[this.tapeLocation] == 0) {
127+
loop = 1;
128+
while (loop > 0) {
129+
i++;
130+
String token = tokens[i];
131+
if (token.equals("well")) {
132+
loop++;
133+
}
134+
else if (token.equals("like")) {
135+
loop--;
136+
}
137+
}
138+
}
139+
break;
140+
141+
case "like":
142+
loop = 1;
143+
while (loop > 0) {
144+
i--;
145+
String token = tokens[i];
146+
if (token.equals("well")) {
147+
loop--;
148+
}
149+
else if (token.equals("like")) {
150+
loop++;
151+
}
152+
}
153+
i--;
154+
break;
155+
}
156+
}
157+
}
158+
catch (IOException e) {
159+
e.printStackTrace();
160+
}
161+
}
162+
163+
164+
public static void main(String args[]) {
165+
Um umm = new Um();
166+
String[] tokens = umm.readProgram(args[0]);
167+
umm.eval(tokens);
168+
}
169+
}

Diff for: bf-um.txt

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Bf-Um equivalence
2+
3+
> um
4+
< uh
5+
+ er
6+
- ah
7+
. ok
8+
, so
9+
[ well
10+
] like

Diff for: examples/ROT13.um

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
er well so er well ah well um er um er uh uh ah like um well uh er um ah like er um um er er er er er er er er well uh ah ah ah ah ah ah ah ah um ah like uh ah well uh well ah like um um um er well uh er uh er um um ah like uh well um er uh ah like uh well uh er er um um um er well uh er uh ah um um ah like uh well um er uh ah like like um well uh like uh like um um well ah like uh uh uh well well ah like uh well um um er um er uh uh uh ah like um um well uh uh er um um ah like um um er er er er er er er er well uh ah ah ah ah ah ah ah ah um ah like uh ah um um er er er er well uh er er er er er er er er um ah like uh ah uh well um um um er uh uh well um er um well ah like uh uh ah like um well uh er um ah like um well uh uh uh uh uh er um um um um er er er er well uh er er er er er er er er um ah like um ah like uh uh ah uh ah like um well uh uh uh uh well ah like um um um um well uh uh uh uh ah um um um um ah like like uh uh er er er er well uh uh er er er er er er er er um um ah like uh uh ah well um um er um er uh uh uh ah like um um well uh uh er um um ah like er um um er er er er er well uh ah ah ah ah ah um ah like uh ah well uh well ah like um um um er well uh er uh ah um um ah like uh well um er uh ah like uh well uh er er um um um er well uh er uh er um um ah like uh well um er uh ah like like um well uh like uh like um um well ah like uh uh uh well well ah like uh uh well um um er um er uh uh uh ah like um um well uh uh er um um ah like er um ah ah ah ah ah ah ah ah ah ah ah ah well uh well ah like um um um er well uh er uh ah um um ah like uh well um er uh ah like uh well uh er er um um um er well uh er uh er um um ah like uh well um er uh ah like like um well uh like uh like um um well ah like uh uh uh uh uh ah ah ah ah ah ah ah ah ah ah ah ah ah um um well well ah like er er er er er well uh uh er er er er er um um ah like uh uh er um um like uh well um er er er er well uh uh er er er er er er er er um um ah like uh ah like um like uh well ah like er er er er er er er er well uh er er er er er er er er um ah like uh er um like uh ok well ah like er um um er uh like um well well ah like uh like uh like

Diff for: examples/helloworld.um

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
er er er er er er er er er er well um er er er er er er er um er er er er er er er er er er um er er er um er uh uh uh uh ah like um er er ok um er ok er er er er er er er ok ok er er er ok um er er ok uh uh er er er er er er er er er er er er er er er ok um ok er er er ok ah ah ah ah ah ah ok ah ah ah ah ah ah ah ah ok um er ok um ok

0 commit comments

Comments
 (0)