Initial commit

This commit is contained in:
Marvin Kaiser
2019-10-28 15:55:18 +01:00
commit 0a9d702198
66 changed files with 4606 additions and 0 deletions

50
.classpath Normal file
View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="target/generated-sources/annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/classes" path="target/generated-sources/antlr4">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>

23
.project Normal file
View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>klang</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,4 @@
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//target/generated-sources/antlr4=UTF-8
encoding/<project>=UTF-8

View File

@@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=false

View File

@@ -0,0 +1,9 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.processAnnotations=disabled
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.7

View File

@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"java.configuration.updateBuildConfiguration": "automatic"
}

74
pom.xml Normal file
View File

@@ -0,0 +1,74 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.hsrm.compiler</groupId>
<artifactId>klang</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>klang</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- This plugin sets up maven to use Java 7 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<!-- Plugin to compile the g4 files ahead of the java files
See https://github.com/antlr/antlr4/blob/master/antlr4-maven-plugin/src/site/apt/examples/simple.apt.vm
Except that the grammar does not need to contain the package declaration as stated in the documentation (I do not know why)
To use this plugin, type:
mvn antlr4:antlr4
In any case, Maven will invoke this plugin before the Java source is compiled
-->
<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>4.5</version>
<executions>
<execution>
<goals>
<goal>antlr4</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- plugin to create a self-contained portable package
This allows us to execute our application like this:
java -cp target/array-init-1.0-jar-with-dependencies.jar org.abcd.examples.ArrayInit.ArrayInit
-->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>simple-command</id>
<phase>package</phase>
<goals>
<goal>attached</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,92 @@
token literal names:
null
'||'
'&&'
'=='
'!='
'>'
'<'
'>='
'<='
'+'
'-'
'*'
'/'
'%'
'^'
'!'
';'
'='
'('
')'
'{'
'}'
'true'
'false'
'nil'
'if'
'else'
'while'
'log'
null
null
null
null
null
null
null
token symbolic names:
null
OR
AND
EQ
NEQ
GT
LT
GTEQ
LTEQ
PLUS
MINUS
MULT
DIV
MOD
POW
NOT
SCOL
ASSIGN
OPAR
CPAR
OBRACE
CBRACE
TRUE
FALSE
NIL
IF
ELSE
WHILE
LOG
ID
INT
FLOAT
STRING
COMMENT
SPACE
OTHER
rule names:
parse
block
stat
assignment
if_stat
condition_block
stat_block
while_stat
log
expr
atom
atn:
[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 37, 124, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 3, 2, 3, 2, 3, 2, 3, 3, 7, 3, 29, 10, 3, 12, 3, 14, 3, 32, 11, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 40, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 7, 6, 52, 10, 6, 12, 6, 14, 6, 55, 11, 6, 3, 6, 3, 6, 5, 6, 59, 10, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 69, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 5, 11, 85, 10, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 108, 10, 11, 12, 11, 14, 11, 111, 11, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 122, 10, 12, 3, 12, 2, 3, 20, 13, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 2, 8, 3, 2, 13, 15, 3, 2, 11, 12, 3, 2, 7, 10, 3, 2, 5, 6, 3, 2, 32, 33, 3, 2, 24, 25, 2, 134, 2, 24, 3, 2, 2, 2, 4, 30, 3, 2, 2, 2, 6, 39, 3, 2, 2, 2, 8, 41, 3, 2, 2, 2, 10, 46, 3, 2, 2, 2, 12, 60, 3, 2, 2, 2, 14, 68, 3, 2, 2, 2, 16, 70, 3, 2, 2, 2, 18, 74, 3, 2, 2, 2, 20, 84, 3, 2, 2, 2, 22, 121, 3, 2, 2, 2, 24, 25, 5, 4, 3, 2, 25, 26, 7, 2, 2, 3, 26, 3, 3, 2, 2, 2, 27, 29, 5, 6, 4, 2, 28, 27, 3, 2, 2, 2, 29, 32, 3, 2, 2, 2, 30, 28, 3, 2, 2, 2, 30, 31, 3, 2, 2, 2, 31, 5, 3, 2, 2, 2, 32, 30, 3, 2, 2, 2, 33, 40, 5, 8, 5, 2, 34, 40, 5, 10, 6, 2, 35, 40, 5, 16, 9, 2, 36, 40, 5, 18, 10, 2, 37, 38, 7, 37, 2, 2, 38, 40, 8, 4, 1, 2, 39, 33, 3, 2, 2, 2, 39, 34, 3, 2, 2, 2, 39, 35, 3, 2, 2, 2, 39, 36, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 40, 7, 3, 2, 2, 2, 41, 42, 7, 31, 2, 2, 42, 43, 7, 19, 2, 2, 43, 44, 5, 20, 11, 2, 44, 45, 7, 18, 2, 2, 45, 9, 3, 2, 2, 2, 46, 47, 7, 27, 2, 2, 47, 53, 5, 12, 7, 2, 48, 49, 7, 28, 2, 2, 49, 50, 7, 27, 2, 2, 50, 52, 5, 12, 7, 2, 51, 48, 3, 2, 2, 2, 52, 55, 3, 2, 2, 2, 53, 51, 3, 2, 2, 2, 53, 54, 3, 2, 2, 2, 54, 58, 3, 2, 2, 2, 55, 53, 3, 2, 2, 2, 56, 57, 7, 28, 2, 2, 57, 59, 5, 14, 8, 2, 58, 56, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 11, 3, 2, 2, 2, 60, 61, 5, 20, 11, 2, 61, 62, 5, 14, 8, 2, 62, 13, 3, 2, 2, 2, 63, 64, 7, 22, 2, 2, 64, 65, 5, 4, 3, 2, 65, 66, 7, 23, 2, 2, 66, 69, 3, 2, 2, 2, 67, 69, 5, 6, 4, 2, 68, 63, 3, 2, 2, 2, 68, 67, 3, 2, 2, 2, 69, 15, 3, 2, 2, 2, 70, 71, 7, 29, 2, 2, 71, 72, 5, 20, 11, 2, 72, 73, 5, 14, 8, 2, 73, 17, 3, 2, 2, 2, 74, 75, 7, 30, 2, 2, 75, 76, 5, 20, 11, 2, 76, 77, 7, 18, 2, 2, 77, 19, 3, 2, 2, 2, 78, 79, 8, 11, 1, 2, 79, 80, 7, 12, 2, 2, 80, 85, 5, 20, 11, 11, 81, 82, 7, 17, 2, 2, 82, 85, 5, 20, 11, 10, 83, 85, 5, 22, 12, 2, 84, 78, 3, 2, 2, 2, 84, 81, 3, 2, 2, 2, 84, 83, 3, 2, 2, 2, 85, 109, 3, 2, 2, 2, 86, 87, 12, 12, 2, 2, 87, 88, 7, 16, 2, 2, 88, 108, 5, 20, 11, 13, 89, 90, 12, 9, 2, 2, 90, 91, 9, 2, 2, 2, 91, 108, 5, 20, 11, 10, 92, 93, 12, 8, 2, 2, 93, 94, 9, 3, 2, 2, 94, 108, 5, 20, 11, 9, 95, 96, 12, 7, 2, 2, 96, 97, 9, 4, 2, 2, 97, 108, 5, 20, 11, 8, 98, 99, 12, 6, 2, 2, 99, 100, 9, 5, 2, 2, 100, 108, 5, 20, 11, 7, 101, 102, 12, 5, 2, 2, 102, 103, 7, 4, 2, 2, 103, 108, 5, 20, 11, 6, 104, 105, 12, 4, 2, 2, 105, 106, 7, 3, 2, 2, 106, 108, 5, 20, 11, 5, 107, 86, 3, 2, 2, 2, 107, 89, 3, 2, 2, 2, 107, 92, 3, 2, 2, 2, 107, 95, 3, 2, 2, 2, 107, 98, 3, 2, 2, 2, 107, 101, 3, 2, 2, 2, 107, 104, 3, 2, 2, 2, 108, 111, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 21, 3, 2, 2, 2, 111, 109, 3, 2, 2, 2, 112, 113, 7, 20, 2, 2, 113, 114, 5, 20, 11, 2, 114, 115, 7, 21, 2, 2, 115, 122, 3, 2, 2, 2, 116, 122, 9, 6, 2, 2, 117, 122, 9, 7, 2, 2, 118, 122, 7, 31, 2, 2, 119, 122, 7, 34, 2, 2, 120, 122, 7, 26, 2, 2, 121, 112, 3, 2, 2, 2, 121, 116, 3, 2, 2, 2, 121, 117, 3, 2, 2, 2, 121, 118, 3, 2, 2, 2, 121, 119, 3, 2, 2, 2, 121, 120, 3, 2, 2, 2, 122, 23, 3, 2, 2, 2, 11, 30, 39, 53, 58, 68, 84, 107, 109, 121]

View File

@@ -0,0 +1,63 @@
OR=1
AND=2
EQ=3
NEQ=4
GT=5
LT=6
GTEQ=7
LTEQ=8
PLUS=9
MINUS=10
MULT=11
DIV=12
MOD=13
POW=14
NOT=15
SCOL=16
ASSIGN=17
OPAR=18
CPAR=19
OBRACE=20
CBRACE=21
TRUE=22
FALSE=23
NIL=24
IF=25
ELSE=26
WHILE=27
LOG=28
ID=29
INT=30
FLOAT=31
STRING=32
COMMENT=33
SPACE=34
OTHER=35
'||'=1
'&&'=2
'=='=3
'!='=4
'>'=5
'<'=6
'>='=7
'<='=8
'+'=9
'-'=10
'*'=11
'/'=12
'%'=13
'^'=14
'!'=15
';'=16
'='=17
'('=18
')'=19
'{'=20
'}'=21
'true'=22
'false'=23
'nil'=24
'if'=25
'else'=26
'while'=27
'log'=28

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,183 @@
// Generated from /home/marvin/Documents/university/compiler/antlr_test/klang/klang/src/main/antlr4/de/hsrm/compiler/Klang/Klang.g4 by ANTLR 4.7.1
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class KlangLexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
OR=1, AND=2, EQ=3, NEQ=4, GT=5, LT=6, GTEQ=7, LTEQ=8, PLUS=9, MINUS=10,
MULT=11, DIV=12, MOD=13, POW=14, NOT=15, SCOL=16, ASSIGN=17, OPAR=18,
CPAR=19, OBRACE=20, CBRACE=21, TRUE=22, FALSE=23, NIL=24, IF=25, ELSE=26,
WHILE=27, LOG=28, ID=29, INT=30, FLOAT=31, STRING=32, COMMENT=33, SPACE=34,
OTHER=35;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
public static String[] modeNames = {
"DEFAULT_MODE"
};
public static final String[] ruleNames = {
"OR", "AND", "EQ", "NEQ", "GT", "LT", "GTEQ", "LTEQ", "PLUS", "MINUS",
"MULT", "DIV", "MOD", "POW", "NOT", "SCOL", "ASSIGN", "OPAR", "CPAR",
"OBRACE", "CBRACE", "TRUE", "FALSE", "NIL", "IF", "ELSE", "WHILE", "LOG",
"ID", "INT", "FLOAT", "STRING", "COMMENT", "SPACE", "OTHER"
};
private static final String[] _LITERAL_NAMES = {
null, "'||'", "'&&'", "'=='", "'!='", "'>'", "'<'", "'>='", "'<='", "'+'",
"'-'", "'*'", "'/'", "'%'", "'^'", "'!'", "';'", "'='", "'('", "')'",
"'{'", "'}'", "'true'", "'false'", "'nil'", "'if'", "'else'", "'while'",
"'log'"
};
private static final String[] _SYMBOLIC_NAMES = {
null, "OR", "AND", "EQ", "NEQ", "GT", "LT", "GTEQ", "LTEQ", "PLUS", "MINUS",
"MULT", "DIV", "MOD", "POW", "NOT", "SCOL", "ASSIGN", "OPAR", "CPAR",
"OBRACE", "CBRACE", "TRUE", "FALSE", "NIL", "IF", "ELSE", "WHILE", "LOG",
"ID", "INT", "FLOAT", "STRING", "COMMENT", "SPACE", "OTHER"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated
public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public KlangLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@Override
public String getGrammarFileName() { return "Klang.g4"; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String[] getChannelNames() { return channelNames; }
@Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2%\u00d4\b\1\4\2\t"+
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\3\2\3\2\3\2\3\3\3\3\3\3\3\4\3\4\3\4\3\5\3\5\3"+
"\5\3\6\3\6\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3"+
"\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24"+
"\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30"+
"\3\30\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33"+
"\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\36\3\36\7\36\u009d"+
"\n\36\f\36\16\36\u00a0\13\36\3\37\6\37\u00a3\n\37\r\37\16\37\u00a4\3 "+
"\6 \u00a8\n \r \16 \u00a9\3 \3 \7 \u00ae\n \f \16 \u00b1\13 \3 \3 \6 "+
"\u00b5\n \r \16 \u00b6\5 \u00b9\n \3!\3!\3!\3!\7!\u00bf\n!\f!\16!\u00c2"+
"\13!\3!\3!\3\"\3\"\7\"\u00c8\n\"\f\"\16\"\u00cb\13\"\3\"\3\"\3#\3#\3#"+
"\3#\3$\3$\2\2%\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16"+
"\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34"+
"\67\359\36;\37= ?!A\"C#E$G%\3\2\b\5\2C\\aac|\6\2\62;C\\aac|\3\2\62;\5"+
"\2\f\f\17\17$$\4\2\f\f\17\17\5\2\13\f\17\17\"\"\2\u00dc\2\3\3\2\2\2\2"+
"\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2"+
"\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2"+
"\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2"+
"\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2"+
"\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2"+
"\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\3I\3\2\2\2\5"+
"L\3\2\2\2\7O\3\2\2\2\tR\3\2\2\2\13U\3\2\2\2\rW\3\2\2\2\17Y\3\2\2\2\21"+
"\\\3\2\2\2\23_\3\2\2\2\25a\3\2\2\2\27c\3\2\2\2\31e\3\2\2\2\33g\3\2\2\2"+
"\35i\3\2\2\2\37k\3\2\2\2!m\3\2\2\2#o\3\2\2\2%q\3\2\2\2\'s\3\2\2\2)u\3"+
"\2\2\2+w\3\2\2\2-y\3\2\2\2/~\3\2\2\2\61\u0084\3\2\2\2\63\u0088\3\2\2\2"+
"\65\u008b\3\2\2\2\67\u0090\3\2\2\29\u0096\3\2\2\2;\u009a\3\2\2\2=\u00a2"+
"\3\2\2\2?\u00b8\3\2\2\2A\u00ba\3\2\2\2C\u00c5\3\2\2\2E\u00ce\3\2\2\2G"+
"\u00d2\3\2\2\2IJ\7~\2\2JK\7~\2\2K\4\3\2\2\2LM\7(\2\2MN\7(\2\2N\6\3\2\2"+
"\2OP\7?\2\2PQ\7?\2\2Q\b\3\2\2\2RS\7#\2\2ST\7?\2\2T\n\3\2\2\2UV\7@\2\2"+
"V\f\3\2\2\2WX\7>\2\2X\16\3\2\2\2YZ\7@\2\2Z[\7?\2\2[\20\3\2\2\2\\]\7>\2"+
"\2]^\7?\2\2^\22\3\2\2\2_`\7-\2\2`\24\3\2\2\2ab\7/\2\2b\26\3\2\2\2cd\7"+
",\2\2d\30\3\2\2\2ef\7\61\2\2f\32\3\2\2\2gh\7\'\2\2h\34\3\2\2\2ij\7`\2"+
"\2j\36\3\2\2\2kl\7#\2\2l \3\2\2\2mn\7=\2\2n\"\3\2\2\2op\7?\2\2p$\3\2\2"+
"\2qr\7*\2\2r&\3\2\2\2st\7+\2\2t(\3\2\2\2uv\7}\2\2v*\3\2\2\2wx\7\177\2"+
"\2x,\3\2\2\2yz\7v\2\2z{\7t\2\2{|\7w\2\2|}\7g\2\2}.\3\2\2\2~\177\7h\2\2"+
"\177\u0080\7c\2\2\u0080\u0081\7n\2\2\u0081\u0082\7u\2\2\u0082\u0083\7"+
"g\2\2\u0083\60\3\2\2\2\u0084\u0085\7p\2\2\u0085\u0086\7k\2\2\u0086\u0087"+
"\7n\2\2\u0087\62\3\2\2\2\u0088\u0089\7k\2\2\u0089\u008a\7h\2\2\u008a\64"+
"\3\2\2\2\u008b\u008c\7g\2\2\u008c\u008d\7n\2\2\u008d\u008e\7u\2\2\u008e"+
"\u008f\7g\2\2\u008f\66\3\2\2\2\u0090\u0091\7y\2\2\u0091\u0092\7j\2\2\u0092"+
"\u0093\7k\2\2\u0093\u0094\7n\2\2\u0094\u0095\7g\2\2\u00958\3\2\2\2\u0096"+
"\u0097\7n\2\2\u0097\u0098\7q\2\2\u0098\u0099\7i\2\2\u0099:\3\2\2\2\u009a"+
"\u009e\t\2\2\2\u009b\u009d\t\3\2\2\u009c\u009b\3\2\2\2\u009d\u00a0\3\2"+
"\2\2\u009e\u009c\3\2\2\2\u009e\u009f\3\2\2\2\u009f<\3\2\2\2\u00a0\u009e"+
"\3\2\2\2\u00a1\u00a3\t\4\2\2\u00a2\u00a1\3\2\2\2\u00a3\u00a4\3\2\2\2\u00a4"+
"\u00a2\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5>\3\2\2\2\u00a6\u00a8\t\4\2\2"+
"\u00a7\u00a6\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00a7\3\2\2\2\u00a9\u00aa"+
"\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00af\7\60\2\2\u00ac\u00ae\t\4\2\2"+
"\u00ad\u00ac\3\2\2\2\u00ae\u00b1\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0"+
"\3\2\2\2\u00b0\u00b9\3\2\2\2\u00b1\u00af\3\2\2\2\u00b2\u00b4\7\60\2\2"+
"\u00b3\u00b5\t\4\2\2\u00b4\u00b3\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b4"+
"\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00b9\3\2\2\2\u00b8\u00a7\3\2\2\2\u00b8"+
"\u00b2\3\2\2\2\u00b9@\3\2\2\2\u00ba\u00c0\7$\2\2\u00bb\u00bf\n\5\2\2\u00bc"+
"\u00bd\7$\2\2\u00bd\u00bf\7$\2\2\u00be\u00bb\3\2\2\2\u00be\u00bc\3\2\2"+
"\2\u00bf\u00c2\3\2\2\2\u00c0\u00be\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c3"+
"\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c3\u00c4\7$\2\2\u00c4B\3\2\2\2\u00c5\u00c9"+
"\7%\2\2\u00c6\u00c8\n\6\2\2\u00c7\u00c6\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9"+
"\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cc\3\2\2\2\u00cb\u00c9\3\2"+
"\2\2\u00cc\u00cd\b\"\2\2\u00cdD\3\2\2\2\u00ce\u00cf\t\7\2\2\u00cf\u00d0"+
"\3\2\2\2\u00d0\u00d1\b#\2\2\u00d1F\3\2\2\2\u00d2\u00d3\13\2\2\2\u00d3"+
"H\3\2\2\2\f\2\u009e\u00a4\u00a9\u00af\u00b6\u00b8\u00be\u00c0\u00c9\3"+
"\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}

View File

@@ -0,0 +1,63 @@
OR=1
AND=2
EQ=3
NEQ=4
GT=5
LT=6
GTEQ=7
LTEQ=8
PLUS=9
MINUS=10
MULT=11
DIV=12
MOD=13
POW=14
NOT=15
SCOL=16
ASSIGN=17
OPAR=18
CPAR=19
OBRACE=20
CBRACE=21
TRUE=22
FALSE=23
NIL=24
IF=25
ELSE=26
WHILE=27
LOG=28
ID=29
INT=30
FLOAT=31
STRING=32
COMMENT=33
SPACE=34
OTHER=35
'||'=1
'&&'=2
'=='=3
'!='=4
'>'=5
'<'=6
'>='=7
'<='=8
'+'=9
'-'=10
'*'=11
'/'=12
'%'=13
'^'=14
'!'=15
';'=16
'='=17
'('=18
')'=19
'{'=20
'}'=21
'true'=22
'false'=23
'nil'=24
'if'=25
'else'=26
'while'=27
'log'=28

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,183 @@
// Generated from /home/marvin/Documents/university/compiler/antlr_test/klang/klang/src/main/antlr4/de/hsrm/compiler/Klang/Klang.g4 by ANTLR 4.7.1
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class calculatorLexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
OR=1, AND=2, EQ=3, NEQ=4, GT=5, LT=6, GTEQ=7, LTEQ=8, PLUS=9, MINUS=10,
MULT=11, DIV=12, MOD=13, POW=14, NOT=15, SCOL=16, ASSIGN=17, OPAR=18,
CPAR=19, OBRACE=20, CBRACE=21, TRUE=22, FALSE=23, NIL=24, IF=25, ELSE=26,
WHILE=27, LOG=28, ID=29, INT=30, FLOAT=31, STRING=32, COMMENT=33, SPACE=34,
OTHER=35;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
public static String[] modeNames = {
"DEFAULT_MODE"
};
public static final String[] ruleNames = {
"OR", "AND", "EQ", "NEQ", "GT", "LT", "GTEQ", "LTEQ", "PLUS", "MINUS",
"MULT", "DIV", "MOD", "POW", "NOT", "SCOL", "ASSIGN", "OPAR", "CPAR",
"OBRACE", "CBRACE", "TRUE", "FALSE", "NIL", "IF", "ELSE", "WHILE", "LOG",
"ID", "INT", "FLOAT", "STRING", "COMMENT", "SPACE", "OTHER"
};
private static final String[] _LITERAL_NAMES = {
null, "'||'", "'&&'", "'=='", "'!='", "'>'", "'<'", "'>='", "'<='", "'+'",
"'-'", "'*'", "'/'", "'%'", "'^'", "'!'", "';'", "'='", "'('", "')'",
"'{'", "'}'", "'true'", "'false'", "'nil'", "'if'", "'else'", "'while'",
"'log'"
};
private static final String[] _SYMBOLIC_NAMES = {
null, "OR", "AND", "EQ", "NEQ", "GT", "LT", "GTEQ", "LTEQ", "PLUS", "MINUS",
"MULT", "DIV", "MOD", "POW", "NOT", "SCOL", "ASSIGN", "OPAR", "CPAR",
"OBRACE", "CBRACE", "TRUE", "FALSE", "NIL", "IF", "ELSE", "WHILE", "LOG",
"ID", "INT", "FLOAT", "STRING", "COMMENT", "SPACE", "OTHER"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated
public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public calculatorLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@Override
public String getGrammarFileName() { return "Klang.g4"; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String[] getChannelNames() { return channelNames; }
@Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2%\u00d4\b\1\4\2\t"+
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\3\2\3\2\3\2\3\3\3\3\3\3\3\4\3\4\3\4\3\5\3\5\3"+
"\5\3\6\3\6\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3"+
"\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24"+
"\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30"+
"\3\30\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33"+
"\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\36\3\36\7\36\u009d"+
"\n\36\f\36\16\36\u00a0\13\36\3\37\6\37\u00a3\n\37\r\37\16\37\u00a4\3 "+
"\6 \u00a8\n \r \16 \u00a9\3 \3 \7 \u00ae\n \f \16 \u00b1\13 \3 \3 \6 "+
"\u00b5\n \r \16 \u00b6\5 \u00b9\n \3!\3!\3!\3!\7!\u00bf\n!\f!\16!\u00c2"+
"\13!\3!\3!\3\"\3\"\7\"\u00c8\n\"\f\"\16\"\u00cb\13\"\3\"\3\"\3#\3#\3#"+
"\3#\3$\3$\2\2%\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16"+
"\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34"+
"\67\359\36;\37= ?!A\"C#E$G%\3\2\b\5\2C\\aac|\6\2\62;C\\aac|\3\2\62;\5"+
"\2\f\f\17\17$$\4\2\f\f\17\17\5\2\13\f\17\17\"\"\2\u00dc\2\3\3\2\2\2\2"+
"\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2"+
"\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2"+
"\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2"+
"\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2"+
"\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2"+
"\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\3I\3\2\2\2\5"+
"L\3\2\2\2\7O\3\2\2\2\tR\3\2\2\2\13U\3\2\2\2\rW\3\2\2\2\17Y\3\2\2\2\21"+
"\\\3\2\2\2\23_\3\2\2\2\25a\3\2\2\2\27c\3\2\2\2\31e\3\2\2\2\33g\3\2\2\2"+
"\35i\3\2\2\2\37k\3\2\2\2!m\3\2\2\2#o\3\2\2\2%q\3\2\2\2\'s\3\2\2\2)u\3"+
"\2\2\2+w\3\2\2\2-y\3\2\2\2/~\3\2\2\2\61\u0084\3\2\2\2\63\u0088\3\2\2\2"+
"\65\u008b\3\2\2\2\67\u0090\3\2\2\29\u0096\3\2\2\2;\u009a\3\2\2\2=\u00a2"+
"\3\2\2\2?\u00b8\3\2\2\2A\u00ba\3\2\2\2C\u00c5\3\2\2\2E\u00ce\3\2\2\2G"+
"\u00d2\3\2\2\2IJ\7~\2\2JK\7~\2\2K\4\3\2\2\2LM\7(\2\2MN\7(\2\2N\6\3\2\2"+
"\2OP\7?\2\2PQ\7?\2\2Q\b\3\2\2\2RS\7#\2\2ST\7?\2\2T\n\3\2\2\2UV\7@\2\2"+
"V\f\3\2\2\2WX\7>\2\2X\16\3\2\2\2YZ\7@\2\2Z[\7?\2\2[\20\3\2\2\2\\]\7>\2"+
"\2]^\7?\2\2^\22\3\2\2\2_`\7-\2\2`\24\3\2\2\2ab\7/\2\2b\26\3\2\2\2cd\7"+
",\2\2d\30\3\2\2\2ef\7\61\2\2f\32\3\2\2\2gh\7\'\2\2h\34\3\2\2\2ij\7`\2"+
"\2j\36\3\2\2\2kl\7#\2\2l \3\2\2\2mn\7=\2\2n\"\3\2\2\2op\7?\2\2p$\3\2\2"+
"\2qr\7*\2\2r&\3\2\2\2st\7+\2\2t(\3\2\2\2uv\7}\2\2v*\3\2\2\2wx\7\177\2"+
"\2x,\3\2\2\2yz\7v\2\2z{\7t\2\2{|\7w\2\2|}\7g\2\2}.\3\2\2\2~\177\7h\2\2"+
"\177\u0080\7c\2\2\u0080\u0081\7n\2\2\u0081\u0082\7u\2\2\u0082\u0083\7"+
"g\2\2\u0083\60\3\2\2\2\u0084\u0085\7p\2\2\u0085\u0086\7k\2\2\u0086\u0087"+
"\7n\2\2\u0087\62\3\2\2\2\u0088\u0089\7k\2\2\u0089\u008a\7h\2\2\u008a\64"+
"\3\2\2\2\u008b\u008c\7g\2\2\u008c\u008d\7n\2\2\u008d\u008e\7u\2\2\u008e"+
"\u008f\7g\2\2\u008f\66\3\2\2\2\u0090\u0091\7y\2\2\u0091\u0092\7j\2\2\u0092"+
"\u0093\7k\2\2\u0093\u0094\7n\2\2\u0094\u0095\7g\2\2\u00958\3\2\2\2\u0096"+
"\u0097\7n\2\2\u0097\u0098\7q\2\2\u0098\u0099\7i\2\2\u0099:\3\2\2\2\u009a"+
"\u009e\t\2\2\2\u009b\u009d\t\3\2\2\u009c\u009b\3\2\2\2\u009d\u00a0\3\2"+
"\2\2\u009e\u009c\3\2\2\2\u009e\u009f\3\2\2\2\u009f<\3\2\2\2\u00a0\u009e"+
"\3\2\2\2\u00a1\u00a3\t\4\2\2\u00a2\u00a1\3\2\2\2\u00a3\u00a4\3\2\2\2\u00a4"+
"\u00a2\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5>\3\2\2\2\u00a6\u00a8\t\4\2\2"+
"\u00a7\u00a6\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00a7\3\2\2\2\u00a9\u00aa"+
"\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00af\7\60\2\2\u00ac\u00ae\t\4\2\2"+
"\u00ad\u00ac\3\2\2\2\u00ae\u00b1\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0"+
"\3\2\2\2\u00b0\u00b9\3\2\2\2\u00b1\u00af\3\2\2\2\u00b2\u00b4\7\60\2\2"+
"\u00b3\u00b5\t\4\2\2\u00b4\u00b3\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b4"+
"\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00b9\3\2\2\2\u00b8\u00a7\3\2\2\2\u00b8"+
"\u00b2\3\2\2\2\u00b9@\3\2\2\2\u00ba\u00c0\7$\2\2\u00bb\u00bf\n\5\2\2\u00bc"+
"\u00bd\7$\2\2\u00bd\u00bf\7$\2\2\u00be\u00bb\3\2\2\2\u00be\u00bc\3\2\2"+
"\2\u00bf\u00c2\3\2\2\2\u00c0\u00be\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c3"+
"\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c3\u00c4\7$\2\2\u00c4B\3\2\2\2\u00c5\u00c9"+
"\7%\2\2\u00c6\u00c8\n\6\2\2\u00c7\u00c6\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9"+
"\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cc\3\2\2\2\u00cb\u00c9\3\2"+
"\2\2\u00cc\u00cd\b\"\2\2\u00cdD\3\2\2\2\u00ce\u00cf\t\7\2\2\u00cf\u00d0"+
"\3\2\2\2\u00d0\u00d1\b#\2\2\u00d1F\3\2\2\2\u00d2\u00d3\13\2\2\2\u00d3"+
"H\3\2\2\2\f\2\u009e\u00a4\u00a9\u00af\u00b6\u00b8\u00be\u00c0\u00c9\3"+
"\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}

View File

@@ -0,0 +1,63 @@
OR=1
AND=2
EQ=3
NEQ=4
GT=5
LT=6
GTEQ=7
LTEQ=8
PLUS=9
MINUS=10
MULT=11
DIV=12
MOD=13
POW=14
NOT=15
SCOL=16
ASSIGN=17
OPAR=18
CPAR=19
OBRACE=20
CBRACE=21
TRUE=22
FALSE=23
NIL=24
IF=25
ELSE=26
WHILE=27
LOG=28
ID=29
INT=30
FLOAT=31
STRING=32
COMMENT=33
SPACE=34
OTHER=35
'||'=1
'&&'=2
'=='=3
'!='=4
'>'=5
'<'=6
'>='=7
'<='=8
'+'=9
'-'=10
'*'=11
'/'=12
'%'=13
'^'=14
'!'=15
';'=16
'='=17
'('=18
')'=19
'{'=20
'}'=21
'true'=22
'false'=23
'nil'=24
'if'=25
'else'=26
'while'=27
'log'=28

View File

@@ -0,0 +1,124 @@
grammar Klang;
parse
: block EOF
;
block
: stat*
;
stat
: assignment
| if_stat
| while_stat
| log
| OTHER {System.err.println("unknown char: " + $OTHER.text);}
;
assignment
: ID ASSIGN expr SCOL
;
if_stat
: IF condition_block (ELSE IF condition_block)* (ELSE stat_block)?
;
condition_block
: expr stat_block
;
stat_block
: OBRACE block CBRACE
| stat
;
while_stat
: WHILE expr stat_block
;
log
: LOG expr SCOL
;
expr
: expr POW<assoc=right> expr #powExpr
| MINUS expr #unaryMinusExpr
| NOT expr #notExpr
| expr op=(MULT | DIV | MOD) expr #multiplicationExpr
| expr op=(PLUS | MINUS) expr #additiveExpr
| expr op=(LTEQ | GTEQ | LT | GT) expr #relationalExpr
| expr op=(EQ | NEQ) expr #equalityExpr
| expr AND expr #andExpr
| expr OR expr #orExpr
| atom #atomExpr
;
atom
: OPAR expr CPAR #parExpr
| (INT | FLOAT) #numberAtom
| (TRUE | FALSE) #booleanAtom
| ID #idAtom
| STRING #stringAtom
| NIL #nilAtom
;
OR : '||';
AND : '&&';
EQ : '==';
NEQ : '!=';
GT : '>';
LT : '<';
GTEQ : '>=';
LTEQ : '<=';
PLUS : '+';
MINUS : '-';
MULT : '*';
DIV : '/';
MOD : '%';
POW : '^';
NOT : '!';
SCOL : ';';
ASSIGN : '=';
OPAR : '(';
CPAR : ')';
OBRACE : '{';
CBRACE : '}';
TRUE : 'true';
FALSE : 'false';
NIL : 'nil';
IF : 'if';
ELSE : 'else';
WHILE : 'while';
LOG : 'log';
ID
: [a-zA-Z_] [a-zA-Z_0-9]*
;
INT
: [0-9]+
;
FLOAT
: [0-9]+ '.' [0-9]*
| '.' [0-9]+
;
STRING
: '"' (~["\r\n] | '""')* '"'
;
COMMENT
: '#' ~[\r\n]* -> skip
;
SPACE
: [ \t\r\n] -> skip
;
OTHER
: .
;

View File

@@ -0,0 +1,24 @@
package de.hsrm.compiler.Klang;
// import ANTLR's runtime libraries
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
public class Klang {
public static void main(String[] args) throws Exception {
// create a CharStream that reads from standard input
ANTLRInputStream input = new ANTLRInputStream(System.in);
// create a lexer that feeds off of input CharStream
KlangLexer lexer = new KlangLexer(input);
// create a buffer of tokens pulled from the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// create a parser that feeds off the tokens buffer
KlangParser parser = new KlangParser(tokens);
ParseTree tree = parser.parse(); // begin parsing at init rule
System.out.println(tree.toStringTree(parser)); // print LISP-style tree
}
}

View File

@@ -0,0 +1,63 @@
OR=1
AND=2
EQ=3
NEQ=4
GT=5
LT=6
GTEQ=7
LTEQ=8
PLUS=9
MINUS=10
MULT=11
DIV=12
MOD=13
POW=14
NOT=15
SCOL=16
ASSIGN=17
OPAR=18
CPAR=19
OBRACE=20
CBRACE=21
TRUE=22
FALSE=23
NIL=24
IF=25
ELSE=26
WHILE=27
LOG=28
ID=29
INT=30
FLOAT=31
STRING=32
COMMENT=33
SPACE=34
OTHER=35
'||'=1
'&&'=2
'=='=3
'!='=4
'>'=5
'<'=6
'>='=7
'<='=8
'+'=9
'-'=10
'*'=11
'/'=12
'%'=13
'^'=14
'!'=15
';'=16
'='=17
'('=18
')'=19
'{'=20
'}'=21
'true'=22
'false'=23
'nil'=24
'if'=25
'else'=26
'while'=27
'log'=28

View File

@@ -0,0 +1,63 @@
OR=1
AND=2
EQ=3
NEQ=4
GT=5
LT=6
GTEQ=7
LTEQ=8
PLUS=9
MINUS=10
MULT=11
DIV=12
MOD=13
POW=14
NOT=15
SCOL=16
ASSIGN=17
OPAR=18
CPAR=19
OBRACE=20
CBRACE=21
TRUE=22
FALSE=23
NIL=24
IF=25
ELSE=26
WHILE=27
LOG=28
ID=29
INT=30
FLOAT=31
STRING=32
COMMENT=33
SPACE=34
OTHER=35
'||'=1
'&&'=2
'=='=3
'!='=4
'>'=5
'<'=6
'>='=7
'<='=8
'+'=9
'-'=10
'*'=11
'/'=12
'%'=13
'^'=14
'!'=15
';'=16
'='=17
'('=18
')'=19
'{'=20
'}'=21
'true'=22
'false'=23
'nil'=24
'if'=25
'else'=26
'while'=27
'log'=28

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,63 @@
OR=1
AND=2
EQ=3
NEQ=4
GT=5
LT=6
GTEQ=7
LTEQ=8
PLUS=9
MINUS=10
MULT=11
DIV=12
MOD=13
POW=14
NOT=15
SCOL=16
ASSIGN=17
OPAR=18
CPAR=19
OBRACE=20
CBRACE=21
TRUE=22
FALSE=23
NIL=24
IF=25
ELSE=26
WHILE=27
LOG=28
ID=29
INT=30
FLOAT=31
STRING=32
COMMENT=33
SPACE=34
OTHER=35
'||'=1
'&&'=2
'=='=3
'!='=4
'>'=5
'<'=6
'>='=7
'<='=8
'+'=9
'-'=10
'*'=11
'/'=12
'%'=13
'^'=14
'!'=15
';'=16
'='=17
'('=18
')'=19
'{'=20
'}'=21
'true'=22
'false'=23
'nil'=24
'if'=25
'else'=26
'while'=27
'log'=28

View File

@@ -0,0 +1,63 @@
OR=1
AND=2
EQ=3
NEQ=4
GT=5
LT=6
GTEQ=7
LTEQ=8
PLUS=9
MINUS=10
MULT=11
DIV=12
MOD=13
POW=14
NOT=15
SCOL=16
ASSIGN=17
OPAR=18
CPAR=19
OBRACE=20
CBRACE=21
TRUE=22
FALSE=23
NIL=24
IF=25
ELSE=26
WHILE=27
LOG=28
ID=29
INT=30
FLOAT=31
STRING=32
COMMENT=33
SPACE=34
OTHER=35
'||'=1
'&&'=2
'=='=3
'!='=4
'>'=5
'<'=6
'>='=7
'<='=8
'+'=9
'-'=10
'*'=11
'/'=12
'%'=13
'^'=14
'!'=15
';'=16
'='=17
'('=18
')'=19
'{'=20
'}'=21
'true'=22
'false'=23
'nil'=24
'if'=25
'else'=26
'while'=27
'log'=28

View File

@@ -0,0 +1,340 @@
// Generated from de/hsrm/compiler/Klang/Klang.g4 by ANTLR 4.5
package de.hsrm.compiler.Klang;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.TerminalNode;
/**
* This class provides an empty implementation of {@link KlangListener},
* which can be extended to create a listener which only needs to handle a subset
* of the available methods.
*/
public class KlangBaseListener implements KlangListener {
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterParse(KlangParser.ParseContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitParse(KlangParser.ParseContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBlock(KlangParser.BlockContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBlock(KlangParser.BlockContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterStat(KlangParser.StatContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitStat(KlangParser.StatContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterAssignment(KlangParser.AssignmentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitAssignment(KlangParser.AssignmentContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterIf_stat(KlangParser.If_statContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitIf_stat(KlangParser.If_statContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterCondition_block(KlangParser.Condition_blockContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitCondition_block(KlangParser.Condition_blockContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterStat_block(KlangParser.Stat_blockContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitStat_block(KlangParser.Stat_blockContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterWhile_stat(KlangParser.While_statContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitWhile_stat(KlangParser.While_statContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterLog(KlangParser.LogContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitLog(KlangParser.LogContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterNotExpr(KlangParser.NotExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitNotExpr(KlangParser.NotExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterUnaryMinusExpr(KlangParser.UnaryMinusExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitUnaryMinusExpr(KlangParser.UnaryMinusExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterMultiplicationExpr(KlangParser.MultiplicationExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitMultiplicationExpr(KlangParser.MultiplicationExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterAtomExpr(KlangParser.AtomExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitAtomExpr(KlangParser.AtomExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterOrExpr(KlangParser.OrExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitOrExpr(KlangParser.OrExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterAdditiveExpr(KlangParser.AdditiveExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitAdditiveExpr(KlangParser.AdditiveExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterPowExpr(KlangParser.PowExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitPowExpr(KlangParser.PowExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterRelationalExpr(KlangParser.RelationalExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitRelationalExpr(KlangParser.RelationalExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterEqualityExpr(KlangParser.EqualityExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitEqualityExpr(KlangParser.EqualityExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterAndExpr(KlangParser.AndExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitAndExpr(KlangParser.AndExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterParExpr(KlangParser.ParExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitParExpr(KlangParser.ParExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterNumberAtom(KlangParser.NumberAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitNumberAtom(KlangParser.NumberAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterBooleanAtom(KlangParser.BooleanAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitBooleanAtom(KlangParser.BooleanAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterIdAtom(KlangParser.IdAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitIdAtom(KlangParser.IdAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterStringAtom(KlangParser.StringAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitStringAtom(KlangParser.StringAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterNilAtom(KlangParser.NilAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitNilAtom(KlangParser.NilAtomContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void enterEveryRule(ParserRuleContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void exitEveryRule(ParserRuleContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void visitTerminal(TerminalNode node) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
@Override public void visitErrorNode(ErrorNode node) { }
}

View File

@@ -0,0 +1,177 @@
// Generated from de/hsrm/compiler/Klang/Klang.g4 by ANTLR 4.5
package de.hsrm.compiler.Klang;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class KlangLexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.5", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
OR=1, AND=2, EQ=3, NEQ=4, GT=5, LT=6, GTEQ=7, LTEQ=8, PLUS=9, MINUS=10,
MULT=11, DIV=12, MOD=13, POW=14, NOT=15, SCOL=16, ASSIGN=17, OPAR=18,
CPAR=19, OBRACE=20, CBRACE=21, TRUE=22, FALSE=23, NIL=24, IF=25, ELSE=26,
WHILE=27, LOG=28, ID=29, INT=30, FLOAT=31, STRING=32, COMMENT=33, SPACE=34,
OTHER=35;
public static String[] modeNames = {
"DEFAULT_MODE"
};
public static final String[] ruleNames = {
"OR", "AND", "EQ", "NEQ", "GT", "LT", "GTEQ", "LTEQ", "PLUS", "MINUS",
"MULT", "DIV", "MOD", "POW", "NOT", "SCOL", "ASSIGN", "OPAR", "CPAR",
"OBRACE", "CBRACE", "TRUE", "FALSE", "NIL", "IF", "ELSE", "WHILE", "LOG",
"ID", "INT", "FLOAT", "STRING", "COMMENT", "SPACE", "OTHER"
};
private static final String[] _LITERAL_NAMES = {
null, "'||'", "'&&'", "'=='", "'!='", "'>'", "'<'", "'>='", "'<='", "'+'",
"'-'", "'*'", "'/'", "'%'", "'^'", "'!'", "';'", "'='", "'('", "')'",
"'{'", "'}'", "'true'", "'false'", "'nil'", "'if'", "'else'", "'while'",
"'log'"
};
private static final String[] _SYMBOLIC_NAMES = {
null, "OR", "AND", "EQ", "NEQ", "GT", "LT", "GTEQ", "LTEQ", "PLUS", "MINUS",
"MULT", "DIV", "MOD", "POW", "NOT", "SCOL", "ASSIGN", "OPAR", "CPAR",
"OBRACE", "CBRACE", "TRUE", "FALSE", "NIL", "IF", "ELSE", "WHILE", "LOG",
"ID", "INT", "FLOAT", "STRING", "COMMENT", "SPACE", "OTHER"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated
public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public KlangLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@Override
public String getGrammarFileName() { return "Klang.g4"; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2%\u00d4\b\1\4\2\t"+
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\3\2\3\2\3\2\3\3\3\3\3\3\3\4\3\4\3\4\3\5\3\5\3"+
"\5\3\6\3\6\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3"+
"\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24"+
"\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30"+
"\3\30\3\30\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33"+
"\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\36\3\36\7\36\u009d"+
"\n\36\f\36\16\36\u00a0\13\36\3\37\6\37\u00a3\n\37\r\37\16\37\u00a4\3 "+
"\6 \u00a8\n \r \16 \u00a9\3 \3 \7 \u00ae\n \f \16 \u00b1\13 \3 \3 \6 "+
"\u00b5\n \r \16 \u00b6\5 \u00b9\n \3!\3!\3!\3!\7!\u00bf\n!\f!\16!\u00c2"+
"\13!\3!\3!\3\"\3\"\7\"\u00c8\n\"\f\"\16\"\u00cb\13\"\3\"\3\"\3#\3#\3#"+
"\3#\3$\3$\2\2%\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16"+
"\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34"+
"\67\359\36;\37= ?!A\"C#E$G%\3\2\b\5\2C\\aac|\6\2\62;C\\aac|\3\2\62;\5"+
"\2\f\f\17\17$$\4\2\f\f\17\17\5\2\13\f\17\17\"\"\u00dc\2\3\3\2\2\2\2\5"+
"\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2"+
"\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33"+
"\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2"+
"\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2"+
"\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2"+
"\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\3I\3\2\2\2\5L"+
"\3\2\2\2\7O\3\2\2\2\tR\3\2\2\2\13U\3\2\2\2\rW\3\2\2\2\17Y\3\2\2\2\21\\"+
"\3\2\2\2\23_\3\2\2\2\25a\3\2\2\2\27c\3\2\2\2\31e\3\2\2\2\33g\3\2\2\2\35"+
"i\3\2\2\2\37k\3\2\2\2!m\3\2\2\2#o\3\2\2\2%q\3\2\2\2\'s\3\2\2\2)u\3\2\2"+
"\2+w\3\2\2\2-y\3\2\2\2/~\3\2\2\2\61\u0084\3\2\2\2\63\u0088\3\2\2\2\65"+
"\u008b\3\2\2\2\67\u0090\3\2\2\29\u0096\3\2\2\2;\u009a\3\2\2\2=\u00a2\3"+
"\2\2\2?\u00b8\3\2\2\2A\u00ba\3\2\2\2C\u00c5\3\2\2\2E\u00ce\3\2\2\2G\u00d2"+
"\3\2\2\2IJ\7~\2\2JK\7~\2\2K\4\3\2\2\2LM\7(\2\2MN\7(\2\2N\6\3\2\2\2OP\7"+
"?\2\2PQ\7?\2\2Q\b\3\2\2\2RS\7#\2\2ST\7?\2\2T\n\3\2\2\2UV\7@\2\2V\f\3\2"+
"\2\2WX\7>\2\2X\16\3\2\2\2YZ\7@\2\2Z[\7?\2\2[\20\3\2\2\2\\]\7>\2\2]^\7"+
"?\2\2^\22\3\2\2\2_`\7-\2\2`\24\3\2\2\2ab\7/\2\2b\26\3\2\2\2cd\7,\2\2d"+
"\30\3\2\2\2ef\7\61\2\2f\32\3\2\2\2gh\7\'\2\2h\34\3\2\2\2ij\7`\2\2j\36"+
"\3\2\2\2kl\7#\2\2l \3\2\2\2mn\7=\2\2n\"\3\2\2\2op\7?\2\2p$\3\2\2\2qr\7"+
"*\2\2r&\3\2\2\2st\7+\2\2t(\3\2\2\2uv\7}\2\2v*\3\2\2\2wx\7\177\2\2x,\3"+
"\2\2\2yz\7v\2\2z{\7t\2\2{|\7w\2\2|}\7g\2\2}.\3\2\2\2~\177\7h\2\2\177\u0080"+
"\7c\2\2\u0080\u0081\7n\2\2\u0081\u0082\7u\2\2\u0082\u0083\7g\2\2\u0083"+
"\60\3\2\2\2\u0084\u0085\7p\2\2\u0085\u0086\7k\2\2\u0086\u0087\7n\2\2\u0087"+
"\62\3\2\2\2\u0088\u0089\7k\2\2\u0089\u008a\7h\2\2\u008a\64\3\2\2\2\u008b"+
"\u008c\7g\2\2\u008c\u008d\7n\2\2\u008d\u008e\7u\2\2\u008e\u008f\7g\2\2"+
"\u008f\66\3\2\2\2\u0090\u0091\7y\2\2\u0091\u0092\7j\2\2\u0092\u0093\7"+
"k\2\2\u0093\u0094\7n\2\2\u0094\u0095\7g\2\2\u00958\3\2\2\2\u0096\u0097"+
"\7n\2\2\u0097\u0098\7q\2\2\u0098\u0099\7i\2\2\u0099:\3\2\2\2\u009a\u009e"+
"\t\2\2\2\u009b\u009d\t\3\2\2\u009c\u009b\3\2\2\2\u009d\u00a0\3\2\2\2\u009e"+
"\u009c\3\2\2\2\u009e\u009f\3\2\2\2\u009f<\3\2\2\2\u00a0\u009e\3\2\2\2"+
"\u00a1\u00a3\t\4\2\2\u00a2\u00a1\3\2\2\2\u00a3\u00a4\3\2\2\2\u00a4\u00a2"+
"\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5>\3\2\2\2\u00a6\u00a8\t\4\2\2\u00a7"+
"\u00a6\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00a7\3\2\2\2\u00a9\u00aa\3\2"+
"\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00af\7\60\2\2\u00ac\u00ae\t\4\2\2\u00ad"+
"\u00ac\3\2\2\2\u00ae\u00b1\3\2\2\2\u00af\u00ad\3\2\2\2\u00af\u00b0\3\2"+
"\2\2\u00b0\u00b9\3\2\2\2\u00b1\u00af\3\2\2\2\u00b2\u00b4\7\60\2\2\u00b3"+
"\u00b5\t\4\2\2\u00b4\u00b3\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b4\3\2"+
"\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00b9\3\2\2\2\u00b8\u00a7\3\2\2\2\u00b8"+
"\u00b2\3\2\2\2\u00b9@\3\2\2\2\u00ba\u00c0\7$\2\2\u00bb\u00bf\n\5\2\2\u00bc"+
"\u00bd\7$\2\2\u00bd\u00bf\7$\2\2\u00be\u00bb\3\2\2\2\u00be\u00bc\3\2\2"+
"\2\u00bf\u00c2\3\2\2\2\u00c0\u00be\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c3"+
"\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c3\u00c4\7$\2\2\u00c4B\3\2\2\2\u00c5\u00c9"+
"\7%\2\2\u00c6\u00c8\n\6\2\2\u00c7\u00c6\3\2\2\2\u00c8\u00cb\3\2\2\2\u00c9"+
"\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cc\3\2\2\2\u00cb\u00c9\3\2"+
"\2\2\u00cc\u00cd\b\"\2\2\u00cdD\3\2\2\2\u00ce\u00cf\t\7\2\2\u00cf\u00d0"+
"\3\2\2\2\u00d0\u00d1\b#\2\2\u00d1F\3\2\2\2\u00d2\u00d3\13\2\2\2\u00d3"+
"H\3\2\2\2\f\2\u009e\u00a4\u00a9\u00af\u00b6\u00b8\u00be\u00c0\u00c9\3"+
"\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}

View File

@@ -0,0 +1,293 @@
// Generated from de/hsrm/compiler/Klang/Klang.g4 by ANTLR 4.5
package de.hsrm.compiler.Klang;
import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.ParseTreeListener;
/**
* This interface defines a complete listener for a parse tree produced by
* {@link KlangParser}.
*/
public interface KlangListener extends ParseTreeListener {
/**
* Enter a parse tree produced by {@link KlangParser#parse}.
* @param ctx the parse tree
*/
void enterParse(KlangParser.ParseContext ctx);
/**
* Exit a parse tree produced by {@link KlangParser#parse}.
* @param ctx the parse tree
*/
void exitParse(KlangParser.ParseContext ctx);
/**
* Enter a parse tree produced by {@link KlangParser#block}.
* @param ctx the parse tree
*/
void enterBlock(KlangParser.BlockContext ctx);
/**
* Exit a parse tree produced by {@link KlangParser#block}.
* @param ctx the parse tree
*/
void exitBlock(KlangParser.BlockContext ctx);
/**
* Enter a parse tree produced by {@link KlangParser#stat}.
* @param ctx the parse tree
*/
void enterStat(KlangParser.StatContext ctx);
/**
* Exit a parse tree produced by {@link KlangParser#stat}.
* @param ctx the parse tree
*/
void exitStat(KlangParser.StatContext ctx);
/**
* Enter a parse tree produced by {@link KlangParser#assignment}.
* @param ctx the parse tree
*/
void enterAssignment(KlangParser.AssignmentContext ctx);
/**
* Exit a parse tree produced by {@link KlangParser#assignment}.
* @param ctx the parse tree
*/
void exitAssignment(KlangParser.AssignmentContext ctx);
/**
* Enter a parse tree produced by {@link KlangParser#if_stat}.
* @param ctx the parse tree
*/
void enterIf_stat(KlangParser.If_statContext ctx);
/**
* Exit a parse tree produced by {@link KlangParser#if_stat}.
* @param ctx the parse tree
*/
void exitIf_stat(KlangParser.If_statContext ctx);
/**
* Enter a parse tree produced by {@link KlangParser#condition_block}.
* @param ctx the parse tree
*/
void enterCondition_block(KlangParser.Condition_blockContext ctx);
/**
* Exit a parse tree produced by {@link KlangParser#condition_block}.
* @param ctx the parse tree
*/
void exitCondition_block(KlangParser.Condition_blockContext ctx);
/**
* Enter a parse tree produced by {@link KlangParser#stat_block}.
* @param ctx the parse tree
*/
void enterStat_block(KlangParser.Stat_blockContext ctx);
/**
* Exit a parse tree produced by {@link KlangParser#stat_block}.
* @param ctx the parse tree
*/
void exitStat_block(KlangParser.Stat_blockContext ctx);
/**
* Enter a parse tree produced by {@link KlangParser#while_stat}.
* @param ctx the parse tree
*/
void enterWhile_stat(KlangParser.While_statContext ctx);
/**
* Exit a parse tree produced by {@link KlangParser#while_stat}.
* @param ctx the parse tree
*/
void exitWhile_stat(KlangParser.While_statContext ctx);
/**
* Enter a parse tree produced by {@link KlangParser#log}.
* @param ctx the parse tree
*/
void enterLog(KlangParser.LogContext ctx);
/**
* Exit a parse tree produced by {@link KlangParser#log}.
* @param ctx the parse tree
*/
void exitLog(KlangParser.LogContext ctx);
/**
* Enter a parse tree produced by the {@code notExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterNotExpr(KlangParser.NotExprContext ctx);
/**
* Exit a parse tree produced by the {@code notExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitNotExpr(KlangParser.NotExprContext ctx);
/**
* Enter a parse tree produced by the {@code unaryMinusExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterUnaryMinusExpr(KlangParser.UnaryMinusExprContext ctx);
/**
* Exit a parse tree produced by the {@code unaryMinusExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitUnaryMinusExpr(KlangParser.UnaryMinusExprContext ctx);
/**
* Enter a parse tree produced by the {@code multiplicationExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterMultiplicationExpr(KlangParser.MultiplicationExprContext ctx);
/**
* Exit a parse tree produced by the {@code multiplicationExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitMultiplicationExpr(KlangParser.MultiplicationExprContext ctx);
/**
* Enter a parse tree produced by the {@code atomExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterAtomExpr(KlangParser.AtomExprContext ctx);
/**
* Exit a parse tree produced by the {@code atomExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitAtomExpr(KlangParser.AtomExprContext ctx);
/**
* Enter a parse tree produced by the {@code orExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterOrExpr(KlangParser.OrExprContext ctx);
/**
* Exit a parse tree produced by the {@code orExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitOrExpr(KlangParser.OrExprContext ctx);
/**
* Enter a parse tree produced by the {@code additiveExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterAdditiveExpr(KlangParser.AdditiveExprContext ctx);
/**
* Exit a parse tree produced by the {@code additiveExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitAdditiveExpr(KlangParser.AdditiveExprContext ctx);
/**
* Enter a parse tree produced by the {@code powExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterPowExpr(KlangParser.PowExprContext ctx);
/**
* Exit a parse tree produced by the {@code powExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitPowExpr(KlangParser.PowExprContext ctx);
/**
* Enter a parse tree produced by the {@code relationalExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterRelationalExpr(KlangParser.RelationalExprContext ctx);
/**
* Exit a parse tree produced by the {@code relationalExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitRelationalExpr(KlangParser.RelationalExprContext ctx);
/**
* Enter a parse tree produced by the {@code equalityExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterEqualityExpr(KlangParser.EqualityExprContext ctx);
/**
* Exit a parse tree produced by the {@code equalityExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitEqualityExpr(KlangParser.EqualityExprContext ctx);
/**
* Enter a parse tree produced by the {@code andExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void enterAndExpr(KlangParser.AndExprContext ctx);
/**
* Exit a parse tree produced by the {@code andExpr}
* labeled alternative in {@link KlangParser#expr}.
* @param ctx the parse tree
*/
void exitAndExpr(KlangParser.AndExprContext ctx);
/**
* Enter a parse tree produced by the {@code parExpr}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void enterParExpr(KlangParser.ParExprContext ctx);
/**
* Exit a parse tree produced by the {@code parExpr}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void exitParExpr(KlangParser.ParExprContext ctx);
/**
* Enter a parse tree produced by the {@code numberAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void enterNumberAtom(KlangParser.NumberAtomContext ctx);
/**
* Exit a parse tree produced by the {@code numberAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void exitNumberAtom(KlangParser.NumberAtomContext ctx);
/**
* Enter a parse tree produced by the {@code booleanAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void enterBooleanAtom(KlangParser.BooleanAtomContext ctx);
/**
* Exit a parse tree produced by the {@code booleanAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void exitBooleanAtom(KlangParser.BooleanAtomContext ctx);
/**
* Enter a parse tree produced by the {@code idAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void enterIdAtom(KlangParser.IdAtomContext ctx);
/**
* Exit a parse tree produced by the {@code idAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void exitIdAtom(KlangParser.IdAtomContext ctx);
/**
* Enter a parse tree produced by the {@code stringAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void enterStringAtom(KlangParser.StringAtomContext ctx);
/**
* Exit a parse tree produced by the {@code stringAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void exitStringAtom(KlangParser.StringAtomContext ctx);
/**
* Enter a parse tree produced by the {@code nilAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void enterNilAtom(KlangParser.NilAtomContext ctx);
/**
* Exit a parse tree produced by the {@code nilAtom}
* labeled alternative in {@link KlangParser#atom}.
* @param ctx the parse tree
*/
void exitNilAtom(KlangParser.NilAtomContext ctx);
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
target/klang-1.0.jar Normal file

Binary file not shown.

View File

@@ -0,0 +1,5 @@
#Generated by Maven
#Mon Oct 28 15:44:47 CET 2019
groupId=de.hsrm.compiler
artifactId=klang
version=1.0

View File

@@ -0,0 +1,5 @@
/home/marvin/Documents/university/compiler/antlr_test/klang/klang/src/main/java/de/hsrm/compiler/Klang/Klang.java
/home/marvin/Documents/university/compiler/antlr_test/klang/klang/target/generated-sources/antlr4/de/hsrm/compiler/Klang/KlangParser.java
/home/marvin/Documents/university/compiler/antlr_test/klang/klang/target/generated-sources/antlr4/de/hsrm/compiler/Klang/KlangBaseListener.java
/home/marvin/Documents/university/compiler/antlr_test/klang/klang/target/generated-sources/antlr4/de/hsrm/compiler/Klang/KlangLexer.java
/home/marvin/Documents/university/compiler/antlr_test/klang/klang/target/generated-sources/antlr4/de/hsrm/compiler/Klang/KlangListener.java

View File

@@ -0,0 +1 @@
/home/marvin/Documents/university/compiler/antlr_test/klang/klang/src/test/java/de/hsrm/compiler/Klang/KlangTest.java