generator tests finished, library javadoc externalized
This commit is contained in:
parent
a845321785
commit
d1d97bc329
12
.classpath
12
.classpath
|
@ -2,20 +2,24 @@
|
|||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="lib" path="lib/antlr-4.7-complete.jar" sourcepath="lib/antlr-4.7-source.zip"/>
|
||||
<classpathentry kind="lib" path="lib/antlr-4.7-complete.jar" sourcepath="lib/antlr-4.7-source.zip">
|
||||
<attributes>
|
||||
<attribute name="javadoc_location" value="http://www.antlr.org/api/Java/"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="lib/hamcrest-all-1.3.jar">
|
||||
<attributes>
|
||||
<attribute name="javadoc_location" value="jar:platform:/resource/Vertalerbouw/lib/hamcrest-all-1.3-javadoc.jar!/"/>
|
||||
<attribute name="javadoc_location" value="http://hamcrest.org/JavaHamcrest/javadoc/1.3/"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="lib/junit-4.12.jar">
|
||||
<attributes>
|
||||
<attribute name="javadoc_location" value="jar:platform:/resource/Vertalerbouw/lib/junit-4.12-javadoc.jar!/"/>
|
||||
<attribute name="javadoc_location" value="http://junit.org/junit4/javadoc/4.12/"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="lib/commons-lang3-3.5.jar">
|
||||
<attributes>
|
||||
<attribute name="javadoc_location" value="jar:platform:/resource/Vertalerbouw/lib/commons-lang3-3.5-javadoc.jar!/"/>
|
||||
<attribute name="javadoc_location" value="https://commons.apache.org/proper/commons-lang/javadocs/api-3.6/"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/junit.jar
BIN
lib/junit.jar
Binary file not shown.
|
@ -156,7 +156,7 @@ public class BoppiBasicGenerator extends BasicBaseVisitor<Void> {
|
|||
|
||||
switch (ctx.op.getType()) {
|
||||
case BasicLexer.MINUS:
|
||||
emit(OpCode.rsubI, new Num(0), getReg(ctx.singleExpr()), getReg(ctx));
|
||||
emit(OpCode.rsubI, getReg(ctx.singleExpr()), new Num(0), getReg(ctx));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -291,6 +291,7 @@ public class BoppiBasicGenerator extends BasicBaseVisitor<Void> {
|
|||
emit(OpCode.out, new Str("Unknown type: "), getReg(expr));
|
||||
}
|
||||
}
|
||||
copyReg(ctx.expr(0), ctx);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,25 +1,18 @@
|
|||
package pp.s1184725.boppi.test;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.empty;
|
||||
import static org.hamcrest.Matchers.hasSize;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.LogRecord;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.logging.*;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.junit.Test;
|
||||
|
||||
import pp.s1184725.boppi.Annotations;
|
||||
import pp.s1184725.boppi.BasicParser;
|
||||
import pp.s1184725.boppi.BasicParserHelper;
|
||||
import pp.s1184725.boppi.BoppiBasicChecker;
|
||||
import pp.s1184725.boppi.*;
|
||||
|
||||
public class CheckerTest {
|
||||
static final Path directory = Paths.get("src/pp/s1184725/boppi/test/parsing/");
|
||||
|
@ -39,9 +32,6 @@ public class CheckerTest {
|
|||
return pair.getRight();
|
||||
}
|
||||
|
||||
protected void debug() {
|
||||
log.forEach(entry -> System.out.println(entry.getMessage()));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,9 +1,18 @@
|
|||
package pp.s1184725.boppi.test;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.empty;
|
||||
import static org.hamcrest.Matchers.hasSize;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.logging.LogRecord;
|
||||
import java.util.logging.Logger;
|
||||
|
@ -20,32 +29,83 @@ import pp.s1184725.boppi.BoppiBasicChecker;
|
|||
import pp.s1184725.boppi.BoppiBasicGenerator;
|
||||
|
||||
public class GeneratorTest {
|
||||
static private List<LogRecord> generateAndGetLog(String code) {
|
||||
static final Path directory = Paths.get("src/pp/s1184725/boppi/test/parsing/");
|
||||
private Pair<String, List<LogRecord>> result;
|
||||
|
||||
static private Pair<String, List<LogRecord>> generateAndGetLog(String code, String input) {
|
||||
Logger logger = Logger.getAnonymousLogger();
|
||||
Pair<BasicParser, List<LogRecord>> pair = BasicParserHelper.getParserWithLog(code, logger);
|
||||
return derp(logger, pair, input);
|
||||
}
|
||||
|
||||
static private Pair<String, List<LogRecord>> generateAndGetLog(Path code, String input) throws IOException {
|
||||
Logger logger = Logger.getAnonymousLogger();
|
||||
Pair<BasicParser, List<LogRecord>> pair = BasicParserHelper.getParserWithLog(code, logger);
|
||||
return derp(logger, pair, input);
|
||||
}
|
||||
|
||||
static private Pair<String, List<LogRecord>> derp(Logger logger, Pair<BasicParser, List<LogRecord>> pair, String input) {
|
||||
Annotations annotater = new Annotations();
|
||||
ParserRuleContext tree = pair.getLeft().program();
|
||||
new BoppiBasicChecker(logger, annotater).visit(tree);
|
||||
BoppiBasicGenerator generator = new BoppiBasicGenerator(annotater);
|
||||
generator.visit(tree);
|
||||
// System.out.println(generator.prog.prettyPrint());
|
||||
// System.out.println(BasicParserHelper.getAnnotatedDOT(tree, annotater));
|
||||
Simulator s = new Simulator(generator.prog);
|
||||
InputStream in = new ByteArrayInputStream("1\nq\n".getBytes(StandardCharsets.UTF_8));
|
||||
InputStream in = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8));
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
s.setIn(in);
|
||||
s.setOut(out);
|
||||
s.run();
|
||||
System.out.println(out.toString());
|
||||
return pair.getRight();
|
||||
try {
|
||||
s.run();
|
||||
}
|
||||
catch (Exception e) {
|
||||
logger.severe(e.getMessage());
|
||||
}
|
||||
return Pair.of(out.toString().replaceAll("\r\n", "\n"), pair.getRight());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void correctExpressionTest() throws IOException {
|
||||
result = generateAndGetLog(directory.resolve("simpleExpression.boppi"), "");
|
||||
assertThat(result.getRight(), empty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void basicTest() {
|
||||
// generateAndGetLog("print(5*3)");
|
||||
// generateAndGetLog("var int x; var int y; x := 3*(y := 4); print(x,y)");
|
||||
// generateAndGetLog("print('T', 'e', 's', 't', '!')");
|
||||
// generateAndGetLog("var int i; if read(i) == 1 then var char c; read(c); print(c,c); else print(i) fi");
|
||||
generateAndGetLog("var int i; i := 10; while i > 0 do print('A', i); i := i-1 od");
|
||||
public void wrongExpressionTest() {
|
||||
result = generateAndGetLog("1/0", "");
|
||||
assertThat(result.getRight(), hasSize(1));
|
||||
assertThat(result.getRight().get(0).getMessage(), containsString("zero"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void correctVariableTest() throws IOException {
|
||||
result = generateAndGetLog(directory.resolve("simpleVariable.boppi"), "");
|
||||
assertThat(result.getRight(), empty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void basicPrograms() throws IOException {
|
||||
result = generateAndGetLog("print(5*3)", "");
|
||||
assertThat(result.getRight(), empty());
|
||||
assertThat(result.getLeft(), is("15\n"));
|
||||
|
||||
result = generateAndGetLog("print('T', 'e', 's', 't', '!')", "");
|
||||
assertThat(result.getRight(), empty());
|
||||
assertThat(result.getLeft(), is("T\ne\ns\nt\n!\n"));
|
||||
|
||||
result = generateAndGetLog("var int x; var int y; x := 3*(y := 4); print(x,y)", "");
|
||||
assertThat(result.getRight(), empty());
|
||||
assertThat(result.getLeft(), is("12\n4\n"));
|
||||
|
||||
result = generateAndGetLog(directory.resolve("basicProgram1.boppi"), "1\nT\n");
|
||||
assertThat(result.getRight(), empty());
|
||||
assertThat(result.getLeft(), is("T\nT\n"));
|
||||
|
||||
result = generateAndGetLog(directory.resolve("fibonacciIterative.boppi"), "6\n");
|
||||
assertThat(result.getRight(), empty());
|
||||
assertThat(result.getLeft(), is("13\n"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
var int i;
|
||||
|
||||
if read(i) == 1 then
|
||||
var char c;
|
||||
read(c);
|
||||
print(c,c);
|
||||
else
|
||||
print(i)
|
||||
fi
|
|
@ -0,0 +1,18 @@
|
|||
var int n;
|
||||
var int i;
|
||||
var int current;
|
||||
var int previous;
|
||||
current := 1;
|
||||
|
||||
read(n);
|
||||
i := 0;
|
||||
|
||||
while i < n do
|
||||
var int next;
|
||||
next := current + previous;
|
||||
previous := current;
|
||||
current := next;
|
||||
i := i+1;
|
||||
od;
|
||||
|
||||
print(current);
|
|
@ -26,3 +26,8 @@ true;
|
|||
3 == 2;
|
||||
1 < 2 == false;
|
||||
!(true <> false) == ('c' == 'd');
|
||||
|
||||
// printing
|
||||
print('1');
|
||||
print(1)+4;
|
||||
print(3, 'A', false);
|
||||
|
|
Loading…
Reference in New Issue