diff --git a/pdp7parse/.gitignore b/pdp7parse/.gitignore
new file mode 100644
index 0000000..b04c3c2
--- /dev/null
+++ b/pdp7parse/.gitignore
@@ -0,0 +1,8 @@
+/**/*.log
+/**/.DS_Store
+/**/.project
+/**/.classpath
+/**/.settings/
+/**/target
+/**/test-output
+ANTLRv4Lexer.g4
diff --git a/pdp7parse/README.md b/pdp7parse/README.md
new file mode 100644
index 0000000..091723c
--- /dev/null
+++ b/pdp7parse/README.md
@@ -0,0 +1,7 @@
+PDP7Parse
+---
+
+PDP7Parse is an example of parsing PDP7 using an [Antlr4](http://www.antlr.org/) grammar. The authoritative home of the grammar file is on Antlr4 [grammars-v4](https://github.com/antlr/grammars-v4) tree.
+
+PDP7Parse could be extended to implement a simple assembler for pdp7-unix.
+
diff --git a/pdp7parse/pom.xml b/pdp7parse/pom.xml
new file mode 100644
index 0000000..07bd220
--- /dev/null
+++ b/pdp7parse/pom.xml
@@ -0,0 +1,58 @@
+
+ 4.0.0
+ com.khubla.pdp7
+ pdp7parse
+ jar
+ khubla.com PDP7 Parser
+ 1.0
+
+ 4.5
+
+
+
+ commons-cli
+ commons-cli
+ 1.2
+ jar
+ compile
+
+
+ org.antlr
+ antlr4-runtime
+ ${antlr.version}
+ jar
+ compile
+
+
+ commons-io
+ commons-io
+ 2.4
+
+
+ junit
+ junit
+ 4.11
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.6
+ 1.6
+
+
+
+ org.antlr
+ antlr4-maven-plugin
+ ${antlr.version}
+
+ pdp7.g4
+ src/main/java
+
+
+
+
+
diff --git a/pdp7parse/src/main/antlr4/com/khubla/pdp7parse/antlr4/pdp7.g4 b/pdp7parse/src/main/antlr4/com/khubla/pdp7parse/antlr4/pdp7.g4
new file mode 100644
index 0000000..81c8713
--- /dev/null
+++ b/pdp7parse/src/main/antlr4/com/khubla/pdp7parse/antlr4/pdp7.g4
@@ -0,0 +1,281 @@
+/*
+BSD License
+
+Copyright (c) 2013, Tom Everett
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. Neither the name of Tom Everett nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+grammar pdp7;
+
+prog
+ : line +
+ ;
+
+line
+ : declarations? comment? eol
+ ;
+
+declarations
+ : declaration (';' declaration)*
+ ;
+
+// multiple labels can occur on the same line
+declaration
+ : label* (instruction | assignment | expression)*
+ ;
+
+instruction
+ : opcode argument*
+ ;
+
+argument
+ : expression
+ ;
+
+assignment
+ : (variable | LOC | RELOC) '=' expression
+ ;
+
+expression
+ : multiplyingExpression ((PLUS | MINUS) multiplyingExpression)*
+ ;
+
+multiplyingExpression
+ : atom ((TIMES | DIV) atom)*
+ ;
+
+atom
+ : variable
+ | LOC
+ | RELOC
+ | string
+ | DECIMAL
+ | DECIMAL_MINUS
+ | OCTAL
+ | signednumber
+ ;
+
+// string chars, then potentially more than 1 octal constant, then potentially '>'
+string
+ : STRING NUMERIC_LITERAL* '>'?
+ ;
+
+signednumber
+ : '-'? NUMERIC_LITERAL
+ ;
+
+eol
+ : EOL
+ ;
+
+comment
+ : COMMENT
+ ;
+
+label
+ : LABEL
+ ;
+
+variable
+ : IDENTIFIER
+ ;
+
+opcode
+ : 'dac'
+ | 'jms'
+ | 'dzm'
+ | 'lac'
+ | 'xor'
+ | 'add'
+ | 'tad'
+ | 'xct'
+ | 'isz'
+ | 'and'
+ | 'sad'
+ | 'jmp'
+ | 'nop'
+// | 'i'
+ | 'law'
+ | 'cma'
+ | 'las'
+ | 'ral'
+ | 'rar'
+ | 'hlt'
+ | 'sma'
+ | 'sza'
+ | 'snl'
+ | 'skp'
+ | 'sna'
+ | 'szl'
+ | 'rtl'
+ | 'rtr'
+ | 'cil'
+ | 'rcl'
+ | 'rcr'
+ | 'cia'
+ | 'lrs'
+ | 'lrss'
+ | 'lls'
+ | 'llss'
+ | 'als'
+ | 'alss'
+ | 'mul'
+ | 'idiv'
+ | 'lacq'
+ | 'clq'
+ | 'omq'
+ | 'cmq'
+ | 'lmq'
+ | 'dscs'
+ | 'dslw'
+ | 'dslm'
+ | 'dsld'
+ | 'dsls'
+ | 'dssf'
+ | 'dsrs'
+ | 'iof'
+ | 'ion'
+ | 'caf'
+ | 'clon'
+ | 'clsf'
+ | 'clof'
+ | 'ksf'
+ | 'krb'
+ | 'tsf'
+ | 'tcf'
+ | 'tls'
+ | 'sck'
+ | 'cck'
+ | 'lck'
+ | 'rsf'
+ | 'rsa'
+ | 'rrb'
+ | 'psf'
+ | 'pcf'
+ | 'psa'
+ | 'cdf'
+ | 'rlpd'
+ | 'lda'
+ | 'wcga'
+ | 'raef'
+ | 'rlpd'
+ | 'beg'
+ | 'spb'
+ | 'cpb'
+ | 'lpb'
+ | 'wbl'
+ | 'dprs'
+ | 'dpsf'
+ | 'dpcf'
+ | 'dprc'
+ | 'crsf'
+ | 'crrb'
+ | 'sys'
+ | 'czm'
+ | 'irss'
+ | 'dsm'
+ ;
+
+LOC
+ : '.'
+ ;
+
+
+RELOC
+ : '..'
+ ;
+
+
+PLUS
+ : '+'
+ ;
+
+
+MINUS
+ : '-'
+ ;
+
+
+TIMES
+ : '*'
+ ;
+
+
+DIV
+ : '/'
+ ;
+
+
+LABEL
+ : [a-zA-Z0-9.] + ':'
+ ;
+
+
+// the period is considered a letter
+IDENTIFIER
+ : [a-zA-Z] [a-zA-Z0-9.]*
+ ;
+
+
+NUMERIC_LITERAL
+ : [0-9][0-9a-f]*
+ ;
+
+DECIMAL
+ : 'd' [0-9] +
+ ;
+
+
+OCTAL
+ : 'o' [0-7] +
+ ;
+
+
+DECIMAL_MINUS
+ : 'dm' [0-9] +
+ ;
+
+
+STRING
+ : '<' [a-zA-Z0-9$*,%/]*
+ ;
+
+
+COMMENT
+ : '"' ~ [\r\n]*
+ ;
+
+
+EOL
+ : [\r\n]+
+ ;
+
+
+WS
+ : [ \t] -> skip
+ ;
diff --git a/pdp7parse/src/main/java/com/khubla/pdp7parse/PDP7Parse.java b/pdp7parse/src/main/java/com/khubla/pdp7parse/PDP7Parse.java
new file mode 100644
index 0000000..d12ebf1
--- /dev/null
+++ b/pdp7parse/src/main/java/com/khubla/pdp7parse/PDP7Parse.java
@@ -0,0 +1,62 @@
+package com.khubla.pdp7parse;
+
+import java.io.File;
+import java.io.FileInputStream;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.OptionBuilder;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.PosixParser;
+
+/**
+ * @author tom
+ */
+public class PDP7Parse {
+ public static void main(String[] args) {
+ try {
+ System.out.println("khubla.com PDP7 Parser");
+ /*
+ * options
+ */
+ final Options options = new Options();
+ OptionBuilder.withArgName(INPUT_FILE_OPTION);
+ OptionBuilder.isRequired();
+ OptionBuilder.withType(String.class);
+ OptionBuilder.hasArg();
+ OptionBuilder.withDescription("file to read");
+ final Option ifo = OptionBuilder.create(INPUT_FILE_OPTION);
+ options.addOption(ifo);
+ /*
+ * parse
+ */
+ final CommandLineParser parser = new PosixParser();
+ CommandLine cmd = null;
+ try {
+ cmd = parser.parse(options, args);
+ } catch (final Exception e) {
+ e.printStackTrace();
+ final HelpFormatter formatter = new HelpFormatter();
+ formatter.printHelp("posix", options);
+ System.exit(0);
+ }
+ /*
+ * get file
+ */
+ final String inputFileName = cmd.getOptionValue(INPUT_FILE_OPTION);
+ final File inputFile = new File(inputFileName);
+ if (inputFile.exists()) {
+ PDP7Parser.parse(new FileInputStream(inputFile), System.out);
+ }
+ } catch (final Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * file option
+ */
+ private static final String INPUT_FILE_OPTION = "file";
+}
\ No newline at end of file
diff --git a/pdp7parse/src/main/java/com/khubla/pdp7parse/PDP7Parser.java b/pdp7parse/src/main/java/com/khubla/pdp7parse/PDP7Parser.java
new file mode 100644
index 0000000..62aac41
--- /dev/null
+++ b/pdp7parse/src/main/java/com/khubla/pdp7parse/PDP7Parser.java
@@ -0,0 +1,31 @@
+package com.khubla.pdp7parse;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+
+import org.antlr.v4.runtime.ANTLRInputStream;
+import org.antlr.v4.runtime.CommonTokenStream;
+
+import com.khubla.pdp7parse.antlr4.pdp7Lexer;
+import com.khubla.pdp7parse.antlr4.pdp7Parser;
+import com.khubla.pdp7parse.antlr4.pdp7Parser.ProgContext;
+
+public class PDP7Parser {
+ public static ProgContext parse(InputStream inputStream, OutputStream outputStream) throws Exception {
+ try {
+ if (null != inputStream) {
+ final Reader reader = new InputStreamReader(inputStream, "UTF-8");
+ final pdp7Lexer lexer = new pdp7Lexer(new ANTLRInputStream(reader));
+ final CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
+ final pdp7Parser parser = new pdp7Parser(commonTokenStream);
+ return parser.prog();
+ } else {
+ throw new IllegalArgumentException();
+ }
+ } catch (final Exception e) {
+ throw new Exception("Exception reading and parsing file", e);
+ }
+ }
+}
diff --git a/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7BaseListener.java b/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7BaseListener.java
new file mode 100644
index 0000000..803d80f
--- /dev/null
+++ b/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7BaseListener.java
@@ -0,0 +1,244 @@
+// Generated from com/khubla/pdp7parse/antlr4/pdp7.g4 by ANTLR 4.5
+package com.khubla.pdp7parse.antlr4;
+
+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 pdp7Listener},
+ * which can be extended to create a listener which only needs to handle a subset
+ * of the available methods.
+ */
+public class pdp7BaseListener implements pdp7Listener {
+ /**
+ * {@inheritDoc}
+ *
+ *
The default implementation does nothing.
+ */
+ @Override public void enterProg(pdp7Parser.ProgContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitProg(pdp7Parser.ProgContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterLine(pdp7Parser.LineContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitLine(pdp7Parser.LineContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterDeclarations(pdp7Parser.DeclarationsContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitDeclarations(pdp7Parser.DeclarationsContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterDeclaration(pdp7Parser.DeclarationContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitDeclaration(pdp7Parser.DeclarationContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterInstruction(pdp7Parser.InstructionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitInstruction(pdp7Parser.InstructionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterArgument(pdp7Parser.ArgumentContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitArgument(pdp7Parser.ArgumentContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterAssignment(pdp7Parser.AssignmentContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitAssignment(pdp7Parser.AssignmentContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterExpression(pdp7Parser.ExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitExpression(pdp7Parser.ExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterMultiplyingExpression(pdp7Parser.MultiplyingExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitMultiplyingExpression(pdp7Parser.MultiplyingExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterAtom(pdp7Parser.AtomContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitAtom(pdp7Parser.AtomContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterString(pdp7Parser.StringContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitString(pdp7Parser.StringContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterSignednumber(pdp7Parser.SignednumberContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitSignednumber(pdp7Parser.SignednumberContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterEol(pdp7Parser.EolContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitEol(pdp7Parser.EolContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterComment(pdp7Parser.CommentContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitComment(pdp7Parser.CommentContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterLabel(pdp7Parser.LabelContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitLabel(pdp7Parser.LabelContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterVariable(pdp7Parser.VariableContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitVariable(pdp7Parser.VariableContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterOpcode(pdp7Parser.OpcodeContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitOpcode(pdp7Parser.OpcodeContext ctx) { }
+
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterEveryRule(ParserRuleContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitEveryRule(ParserRuleContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void visitTerminal(TerminalNode node) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void visitErrorNode(ErrorNode node) { }
+}
\ No newline at end of file
diff --git a/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7Lexer.java b/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7Lexer.java
new file mode 100644
index 0000000..56725ff
--- /dev/null
+++ b/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7Lexer.java
@@ -0,0 +1,372 @@
+// Generated from com/khubla/pdp7parse/antlr4/pdp7.g4 by ANTLR 4.5
+package com.khubla.pdp7parse.antlr4;
+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 pdp7Lexer 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
+ T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
+ T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
+ T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
+ T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
+ T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
+ T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
+ T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52,
+ T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59,
+ T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66,
+ T__66=67, T__67=68, T__68=69, T__69=70, T__70=71, T__71=72, T__72=73,
+ T__73=74, T__74=75, T__75=76, T__76=77, T__77=78, T__78=79, T__79=80,
+ T__80=81, T__81=82, T__82=83, T__83=84, T__84=85, T__85=86, T__86=87,
+ T__87=88, T__88=89, T__89=90, T__90=91, T__91=92, T__92=93, T__93=94,
+ LOC=95, RELOC=96, PLUS=97, MINUS=98, TIMES=99, DIV=100, LABEL=101, IDENTIFIER=102,
+ NUMERIC_LITERAL=103, DECIMAL=104, OCTAL=105, DECIMAL_MINUS=106, STRING=107,
+ COMMENT=108, EOL=109, WS=110;
+ public static String[] modeNames = {
+ "DEFAULT_MODE"
+ };
+
+ public static final String[] ruleNames = {
+ "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8",
+ "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16",
+ "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24",
+ "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32",
+ "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40",
+ "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48",
+ "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56",
+ "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64",
+ "T__65", "T__66", "T__67", "T__68", "T__69", "T__70", "T__71", "T__72",
+ "T__73", "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", "T__80",
+ "T__81", "T__82", "T__83", "T__84", "T__85", "T__86", "T__87", "T__88",
+ "T__89", "T__90", "T__91", "T__92", "T__93", "LOC", "RELOC", "PLUS", "MINUS",
+ "TIMES", "DIV", "LABEL", "IDENTIFIER", "NUMERIC_LITERAL", "DECIMAL", "OCTAL",
+ "DECIMAL_MINUS", "STRING", "COMMENT", "EOL", "WS"
+ };
+
+ private static final String[] _LITERAL_NAMES = {
+ null, "';'", "'='", "'>'", "'dac'", "'jms'", "'dzm'", "'lac'", "'xor'",
+ "'add'", "'tad'", "'xct'", "'isz'", "'and'", "'sad'", "'jmp'", "'nop'",
+ "'law'", "'cma'", "'las'", "'ral'", "'rar'", "'hlt'", "'sma'", "'sza'",
+ "'snl'", "'skp'", "'sna'", "'szl'", "'rtl'", "'rtr'", "'cil'", "'rcl'",
+ "'rcr'", "'cia'", "'lrs'", "'lrss'", "'lls'", "'llss'", "'als'", "'alss'",
+ "'mul'", "'idiv'", "'lacq'", "'clq'", "'omq'", "'cmq'", "'lmq'", "'dscs'",
+ "'dslw'", "'dslm'", "'dsld'", "'dsls'", "'dssf'", "'dsrs'", "'iof'", "'ion'",
+ "'caf'", "'clon'", "'clsf'", "'clof'", "'ksf'", "'krb'", "'tsf'", "'tcf'",
+ "'tls'", "'sck'", "'cck'", "'lck'", "'rsf'", "'rsa'", "'rrb'", "'psf'",
+ "'pcf'", "'psa'", "'cdf'", "'rlpd'", "'lda'", "'wcga'", "'raef'", "'beg'",
+ "'spb'", "'cpb'", "'lpb'", "'wbl'", "'dprs'", "'dpsf'", "'dpcf'", "'dprc'",
+ "'crsf'", "'crrb'", "'sys'", "'czm'", "'irss'", "'dsm'", "'.'", "'..'",
+ "'+'", "'-'", "'*'", "'/'"
+ };
+ private static final String[] _SYMBOLIC_NAMES = {
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, "LOC",
+ "RELOC", "PLUS", "MINUS", "TIMES", "DIV", "LABEL", "IDENTIFIER", "NUMERIC_LITERAL",
+ "DECIMAL", "OCTAL", "DECIMAL_MINUS", "STRING", "COMMENT", "EOL", "WS"
+ };
+ 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] = "";
+ }
+ }
+ }
+
+ @Override
+ @Deprecated
+ public String[] getTokenNames() {
+ return tokenNames;
+ }
+
+ @Override
+
+ public Vocabulary getVocabulary() {
+ return VOCABULARY;
+ }
+
+
+ public pdp7Lexer(CharStream input) {
+ super(input);
+ _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+ }
+
+ @Override
+ public String getGrammarFileName() { return "pdp7.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\2p\u02b7\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$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
+ ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
+ "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
+ "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
+ "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+
+ "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+
+ "`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"+
+ "k\4l\tl\4m\tm\4n\tn\4o\to\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\5\3\5\3\6"+
+ "\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\n\3\n\3"+
+ "\n\3\n\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3"+
+ "\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3"+
+ "\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\25\3\25\3"+
+ "\25\3\25\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3"+
+ "\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\34\3\34\3"+
+ "\34\3\34\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3"+
+ " \3 \3 \3 \3!\3!\3!\3!\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3$\3$\3$\3$\3%\3%\3"+
+ "%\3%\3%\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3)\3)\3*"+
+ "\3*\3*\3*\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3-\3-\3-\3-\3.\3.\3.\3.\3/\3/"+
+ "\3/\3/\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62"+
+ "\3\62\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65"+
+ "\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\38\38\38"+
+ "\38\39\39\39\39\3:\3:\3:\3:\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3=\3=\3=\3="+
+ "\3=\3>\3>\3>\3>\3?\3?\3?\3?\3@\3@\3@\3@\3A\3A\3A\3A\3B\3B\3B\3B\3C\3C"+
+ "\3C\3C\3D\3D\3D\3D\3E\3E\3E\3E\3F\3F\3F\3F\3G\3G\3G\3G\3H\3H\3H\3H\3I"+
+ "\3I\3I\3I\3J\3J\3J\3J\3K\3K\3K\3K\3L\3L\3L\3L\3M\3M\3M\3M\3M\3N\3N\3N"+
+ "\3N\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3S\3S\3S\3S"+
+ "\3T\3T\3T\3T\3U\3U\3U\3U\3V\3V\3V\3V\3V\3W\3W\3W\3W\3W\3X\3X\3X\3X\3X"+
+ "\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3Z\3[\3[\3[\3[\3[\3\\\3\\\3\\\3\\\3]\3]\3"+
+ "]\3]\3^\3^\3^\3^\3^\3_\3_\3_\3_\3`\3`\3a\3a\3a\3b\3b\3c\3c\3d\3d\3e\3"+
+ "e\3f\6f\u0279\nf\rf\16f\u027a\3f\3f\3g\3g\7g\u0281\ng\fg\16g\u0284\13"+
+ "g\3h\3h\7h\u0288\nh\fh\16h\u028b\13h\3i\3i\6i\u028f\ni\ri\16i\u0290\3"+
+ "j\3j\6j\u0295\nj\rj\16j\u0296\3k\3k\3k\3k\6k\u029d\nk\rk\16k\u029e\3l"+
+ "\3l\7l\u02a3\nl\fl\16l\u02a6\13l\3m\3m\7m\u02aa\nm\fm\16m\u02ad\13m\3"+
+ "n\6n\u02b0\nn\rn\16n\u02b1\3o\3o\3o\3o\2\2p\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%I&K\'M(O)Q*S+"+
+ "U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q:s;u{?}@\177A\u0081"+
+ "B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095"+
+ "L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9"+
+ "V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd"+
+ "`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1"+
+ "j\u00d3k\u00d5l\u00d7m\u00d9n\u00dbo\u00ddp\3\2\n\6\2\60\60\62;C\\c|\4"+
+ "\2C\\c|\3\2\62;\4\2\62;ch\3\2\629\b\2&\',,..\61;C\\c|\4\2\f\f\17\17\4"+
+ "\2\13\13\"\"\u02bf\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\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2"+
+ "\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\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\2i\3\2\2\2\2k"+
+ "\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2"+
+ "\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2"+
+ "\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b"+
+ "\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2"+
+ "\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d"+
+ "\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2"+
+ "\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af"+
+ "\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2"+
+ "\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1"+
+ "\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2"+
+ "\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d3"+
+ "\3\2\2\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9\3\2\2\2\2\u00db\3\2\2"+
+ "\2\2\u00dd\3\2\2\2\3\u00df\3\2\2\2\5\u00e1\3\2\2\2\7\u00e3\3\2\2\2\t\u00e5"+
+ "\3\2\2\2\13\u00e9\3\2\2\2\r\u00ed\3\2\2\2\17\u00f1\3\2\2\2\21\u00f5\3"+
+ "\2\2\2\23\u00f9\3\2\2\2\25\u00fd\3\2\2\2\27\u0101\3\2\2\2\31\u0105\3\2"+
+ "\2\2\33\u0109\3\2\2\2\35\u010d\3\2\2\2\37\u0111\3\2\2\2!\u0115\3\2\2\2"+
+ "#\u0119\3\2\2\2%\u011d\3\2\2\2\'\u0121\3\2\2\2)\u0125\3\2\2\2+\u0129\3"+
+ "\2\2\2-\u012d\3\2\2\2/\u0131\3\2\2\2\61\u0135\3\2\2\2\63\u0139\3\2\2\2"+
+ "\65\u013d\3\2\2\2\67\u0141\3\2\2\29\u0145\3\2\2\2;\u0149\3\2\2\2=\u014d"+
+ "\3\2\2\2?\u0151\3\2\2\2A\u0155\3\2\2\2C\u0159\3\2\2\2E\u015d\3\2\2\2G"+
+ "\u0161\3\2\2\2I\u0165\3\2\2\2K\u016a\3\2\2\2M\u016e\3\2\2\2O\u0173\3\2"+
+ "\2\2Q\u0177\3\2\2\2S\u017c\3\2\2\2U\u0180\3\2\2\2W\u0185\3\2\2\2Y\u018a"+
+ "\3\2\2\2[\u018e\3\2\2\2]\u0192\3\2\2\2_\u0196\3\2\2\2a\u019a\3\2\2\2c"+
+ "\u019f\3\2\2\2e\u01a4\3\2\2\2g\u01a9\3\2\2\2i\u01ae\3\2\2\2k\u01b3\3\2"+
+ "\2\2m\u01b8\3\2\2\2o\u01bd\3\2\2\2q\u01c1\3\2\2\2s\u01c5\3\2\2\2u\u01c9"+
+ "\3\2\2\2w\u01ce\3\2\2\2y\u01d3\3\2\2\2{\u01d8\3\2\2\2}\u01dc\3\2\2\2\177"+
+ "\u01e0\3\2\2\2\u0081\u01e4\3\2\2\2\u0083\u01e8\3\2\2\2\u0085\u01ec\3\2"+
+ "\2\2\u0087\u01f0\3\2\2\2\u0089\u01f4\3\2\2\2\u008b\u01f8\3\2\2\2\u008d"+
+ "\u01fc\3\2\2\2\u008f\u0200\3\2\2\2\u0091\u0204\3\2\2\2\u0093\u0208\3\2"+
+ "\2\2\u0095\u020c\3\2\2\2\u0097\u0210\3\2\2\2\u0099\u0214\3\2\2\2\u009b"+
+ "\u0219\3\2\2\2\u009d\u021d\3\2\2\2\u009f\u0222\3\2\2\2\u00a1\u0227\3\2"+
+ "\2\2\u00a3\u022b\3\2\2\2\u00a5\u022f\3\2\2\2\u00a7\u0233\3\2\2\2\u00a9"+
+ "\u0237\3\2\2\2\u00ab\u023b\3\2\2\2\u00ad\u0240\3\2\2\2\u00af\u0245\3\2"+
+ "\2\2\u00b1\u024a\3\2\2\2\u00b3\u024f\3\2\2\2\u00b5\u0254\3\2\2\2\u00b7"+
+ "\u0259\3\2\2\2\u00b9\u025d\3\2\2\2\u00bb\u0261\3\2\2\2\u00bd\u0266\3\2"+
+ "\2\2\u00bf\u026a\3\2\2\2\u00c1\u026c\3\2\2\2\u00c3\u026f\3\2\2\2\u00c5"+
+ "\u0271\3\2\2\2\u00c7\u0273\3\2\2\2\u00c9\u0275\3\2\2\2\u00cb\u0278\3\2"+
+ "\2\2\u00cd\u027e\3\2\2\2\u00cf\u0285\3\2\2\2\u00d1\u028c\3\2\2\2\u00d3"+
+ "\u0292\3\2\2\2\u00d5\u0298\3\2\2\2\u00d7\u02a0\3\2\2\2\u00d9\u02a7\3\2"+
+ "\2\2\u00db\u02af\3\2\2\2\u00dd\u02b3\3\2\2\2\u00df\u00e0\7=\2\2\u00e0"+
+ "\4\3\2\2\2\u00e1\u00e2\7?\2\2\u00e2\6\3\2\2\2\u00e3\u00e4\7@\2\2\u00e4"+
+ "\b\3\2\2\2\u00e5\u00e6\7f\2\2\u00e6\u00e7\7c\2\2\u00e7\u00e8\7e\2\2\u00e8"+
+ "\n\3\2\2\2\u00e9\u00ea\7l\2\2\u00ea\u00eb\7o\2\2\u00eb\u00ec\7u\2\2\u00ec"+
+ "\f\3\2\2\2\u00ed\u00ee\7f\2\2\u00ee\u00ef\7|\2\2\u00ef\u00f0\7o\2\2\u00f0"+
+ "\16\3\2\2\2\u00f1\u00f2\7n\2\2\u00f2\u00f3\7c\2\2\u00f3\u00f4\7e\2\2\u00f4"+
+ "\20\3\2\2\2\u00f5\u00f6\7z\2\2\u00f6\u00f7\7q\2\2\u00f7\u00f8\7t\2\2\u00f8"+
+ "\22\3\2\2\2\u00f9\u00fa\7c\2\2\u00fa\u00fb\7f\2\2\u00fb\u00fc\7f\2\2\u00fc"+
+ "\24\3\2\2\2\u00fd\u00fe\7v\2\2\u00fe\u00ff\7c\2\2\u00ff\u0100\7f\2\2\u0100"+
+ "\26\3\2\2\2\u0101\u0102\7z\2\2\u0102\u0103\7e\2\2\u0103\u0104\7v\2\2\u0104"+
+ "\30\3\2\2\2\u0105\u0106\7k\2\2\u0106\u0107\7u\2\2\u0107\u0108\7|\2\2\u0108"+
+ "\32\3\2\2\2\u0109\u010a\7c\2\2\u010a\u010b\7p\2\2\u010b\u010c\7f\2\2\u010c"+
+ "\34\3\2\2\2\u010d\u010e\7u\2\2\u010e\u010f\7c\2\2\u010f\u0110\7f\2\2\u0110"+
+ "\36\3\2\2\2\u0111\u0112\7l\2\2\u0112\u0113\7o\2\2\u0113\u0114\7r\2\2\u0114"+
+ " \3\2\2\2\u0115\u0116\7p\2\2\u0116\u0117\7q\2\2\u0117\u0118\7r\2\2\u0118"+
+ "\"\3\2\2\2\u0119\u011a\7n\2\2\u011a\u011b\7c\2\2\u011b\u011c\7y\2\2\u011c"+
+ "$\3\2\2\2\u011d\u011e\7e\2\2\u011e\u011f\7o\2\2\u011f\u0120\7c\2\2\u0120"+
+ "&\3\2\2\2\u0121\u0122\7n\2\2\u0122\u0123\7c\2\2\u0123\u0124\7u\2\2\u0124"+
+ "(\3\2\2\2\u0125\u0126\7t\2\2\u0126\u0127\7c\2\2\u0127\u0128\7n\2\2\u0128"+
+ "*\3\2\2\2\u0129\u012a\7t\2\2\u012a\u012b\7c\2\2\u012b\u012c\7t\2\2\u012c"+
+ ",\3\2\2\2\u012d\u012e\7j\2\2\u012e\u012f\7n\2\2\u012f\u0130\7v\2\2\u0130"+
+ ".\3\2\2\2\u0131\u0132\7u\2\2\u0132\u0133\7o\2\2\u0133\u0134\7c\2\2\u0134"+
+ "\60\3\2\2\2\u0135\u0136\7u\2\2\u0136\u0137\7|\2\2\u0137\u0138\7c\2\2\u0138"+
+ "\62\3\2\2\2\u0139\u013a\7u\2\2\u013a\u013b\7p\2\2\u013b\u013c\7n\2\2\u013c"+
+ "\64\3\2\2\2\u013d\u013e\7u\2\2\u013e\u013f\7m\2\2\u013f\u0140\7r\2\2\u0140"+
+ "\66\3\2\2\2\u0141\u0142\7u\2\2\u0142\u0143\7p\2\2\u0143\u0144\7c\2\2\u0144"+
+ "8\3\2\2\2\u0145\u0146\7u\2\2\u0146\u0147\7|\2\2\u0147\u0148\7n\2\2\u0148"+
+ ":\3\2\2\2\u0149\u014a\7t\2\2\u014a\u014b\7v\2\2\u014b\u014c\7n\2\2\u014c"+
+ "<\3\2\2\2\u014d\u014e\7t\2\2\u014e\u014f\7v\2\2\u014f\u0150\7t\2\2\u0150"+
+ ">\3\2\2\2\u0151\u0152\7e\2\2\u0152\u0153\7k\2\2\u0153\u0154\7n\2\2\u0154"+
+ "@\3\2\2\2\u0155\u0156\7t\2\2\u0156\u0157\7e\2\2\u0157\u0158\7n\2\2\u0158"+
+ "B\3\2\2\2\u0159\u015a\7t\2\2\u015a\u015b\7e\2\2\u015b\u015c\7t\2\2\u015c"+
+ "D\3\2\2\2\u015d\u015e\7e\2\2\u015e\u015f\7k\2\2\u015f\u0160\7c\2\2\u0160"+
+ "F\3\2\2\2\u0161\u0162\7n\2\2\u0162\u0163\7t\2\2\u0163\u0164\7u\2\2\u0164"+
+ "H\3\2\2\2\u0165\u0166\7n\2\2\u0166\u0167\7t\2\2\u0167\u0168\7u\2\2\u0168"+
+ "\u0169\7u\2\2\u0169J\3\2\2\2\u016a\u016b\7n\2\2\u016b\u016c\7n\2\2\u016c"+
+ "\u016d\7u\2\2\u016dL\3\2\2\2\u016e\u016f\7n\2\2\u016f\u0170\7n\2\2\u0170"+
+ "\u0171\7u\2\2\u0171\u0172\7u\2\2\u0172N\3\2\2\2\u0173\u0174\7c\2\2\u0174"+
+ "\u0175\7n\2\2\u0175\u0176\7u\2\2\u0176P\3\2\2\2\u0177\u0178\7c\2\2\u0178"+
+ "\u0179\7n\2\2\u0179\u017a\7u\2\2\u017a\u017b\7u\2\2\u017bR\3\2\2\2\u017c"+
+ "\u017d\7o\2\2\u017d\u017e\7w\2\2\u017e\u017f\7n\2\2\u017fT\3\2\2\2\u0180"+
+ "\u0181\7k\2\2\u0181\u0182\7f\2\2\u0182\u0183\7k\2\2\u0183\u0184\7x\2\2"+
+ "\u0184V\3\2\2\2\u0185\u0186\7n\2\2\u0186\u0187\7c\2\2\u0187\u0188\7e\2"+
+ "\2\u0188\u0189\7s\2\2\u0189X\3\2\2\2\u018a\u018b\7e\2\2\u018b\u018c\7"+
+ "n\2\2\u018c\u018d\7s\2\2\u018dZ\3\2\2\2\u018e\u018f\7q\2\2\u018f\u0190"+
+ "\7o\2\2\u0190\u0191\7s\2\2\u0191\\\3\2\2\2\u0192\u0193\7e\2\2\u0193\u0194"+
+ "\7o\2\2\u0194\u0195\7s\2\2\u0195^\3\2\2\2\u0196\u0197\7n\2\2\u0197\u0198"+
+ "\7o\2\2\u0198\u0199\7s\2\2\u0199`\3\2\2\2\u019a\u019b\7f\2\2\u019b\u019c"+
+ "\7u\2\2\u019c\u019d\7e\2\2\u019d\u019e\7u\2\2\u019eb\3\2\2\2\u019f\u01a0"+
+ "\7f\2\2\u01a0\u01a1\7u\2\2\u01a1\u01a2\7n\2\2\u01a2\u01a3\7y\2\2\u01a3"+
+ "d\3\2\2\2\u01a4\u01a5\7f\2\2\u01a5\u01a6\7u\2\2\u01a6\u01a7\7n\2\2\u01a7"+
+ "\u01a8\7o\2\2\u01a8f\3\2\2\2\u01a9\u01aa\7f\2\2\u01aa\u01ab\7u\2\2\u01ab"+
+ "\u01ac\7n\2\2\u01ac\u01ad\7f\2\2\u01adh\3\2\2\2\u01ae\u01af\7f\2\2\u01af"+
+ "\u01b0\7u\2\2\u01b0\u01b1\7n\2\2\u01b1\u01b2\7u\2\2\u01b2j\3\2\2\2\u01b3"+
+ "\u01b4\7f\2\2\u01b4\u01b5\7u\2\2\u01b5\u01b6\7u\2\2\u01b6\u01b7\7h\2\2"+
+ "\u01b7l\3\2\2\2\u01b8\u01b9\7f\2\2\u01b9\u01ba\7u\2\2\u01ba\u01bb\7t\2"+
+ "\2\u01bb\u01bc\7u\2\2\u01bcn\3\2\2\2\u01bd\u01be\7k\2\2\u01be\u01bf\7"+
+ "q\2\2\u01bf\u01c0\7h\2\2\u01c0p\3\2\2\2\u01c1\u01c2\7k\2\2\u01c2\u01c3"+
+ "\7q\2\2\u01c3\u01c4\7p\2\2\u01c4r\3\2\2\2\u01c5\u01c6\7e\2\2\u01c6\u01c7"+
+ "\7c\2\2\u01c7\u01c8\7h\2\2\u01c8t\3\2\2\2\u01c9\u01ca\7e\2\2\u01ca\u01cb"+
+ "\7n\2\2\u01cb\u01cc\7q\2\2\u01cc\u01cd\7p\2\2\u01cdv\3\2\2\2\u01ce\u01cf"+
+ "\7e\2\2\u01cf\u01d0\7n\2\2\u01d0\u01d1\7u\2\2\u01d1\u01d2\7h\2\2\u01d2"+
+ "x\3\2\2\2\u01d3\u01d4\7e\2\2\u01d4\u01d5\7n\2\2\u01d5\u01d6\7q\2\2\u01d6"+
+ "\u01d7\7h\2\2\u01d7z\3\2\2\2\u01d8\u01d9\7m\2\2\u01d9\u01da\7u\2\2\u01da"+
+ "\u01db\7h\2\2\u01db|\3\2\2\2\u01dc\u01dd\7m\2\2\u01dd\u01de\7t\2\2\u01de"+
+ "\u01df\7d\2\2\u01df~\3\2\2\2\u01e0\u01e1\7v\2\2\u01e1\u01e2\7u\2\2\u01e2"+
+ "\u01e3\7h\2\2\u01e3\u0080\3\2\2\2\u01e4\u01e5\7v\2\2\u01e5\u01e6\7e\2"+
+ "\2\u01e6\u01e7\7h\2\2\u01e7\u0082\3\2\2\2\u01e8\u01e9\7v\2\2\u01e9\u01ea"+
+ "\7n\2\2\u01ea\u01eb\7u\2\2\u01eb\u0084\3\2\2\2\u01ec\u01ed\7u\2\2\u01ed"+
+ "\u01ee\7e\2\2\u01ee\u01ef\7m\2\2\u01ef\u0086\3\2\2\2\u01f0\u01f1\7e\2"+
+ "\2\u01f1\u01f2\7e\2\2\u01f2\u01f3\7m\2\2\u01f3\u0088\3\2\2\2\u01f4\u01f5"+
+ "\7n\2\2\u01f5\u01f6\7e\2\2\u01f6\u01f7\7m\2\2\u01f7\u008a\3\2\2\2\u01f8"+
+ "\u01f9\7t\2\2\u01f9\u01fa\7u\2\2\u01fa\u01fb\7h\2\2\u01fb\u008c\3\2\2"+
+ "\2\u01fc\u01fd\7t\2\2\u01fd\u01fe\7u\2\2\u01fe\u01ff\7c\2\2\u01ff\u008e"+
+ "\3\2\2\2\u0200\u0201\7t\2\2\u0201\u0202\7t\2\2\u0202\u0203\7d\2\2\u0203"+
+ "\u0090\3\2\2\2\u0204\u0205\7r\2\2\u0205\u0206\7u\2\2\u0206\u0207\7h\2"+
+ "\2\u0207\u0092\3\2\2\2\u0208\u0209\7r\2\2\u0209\u020a\7e\2\2\u020a\u020b"+
+ "\7h\2\2\u020b\u0094\3\2\2\2\u020c\u020d\7r\2\2\u020d\u020e\7u\2\2\u020e"+
+ "\u020f\7c\2\2\u020f\u0096\3\2\2\2\u0210\u0211\7e\2\2\u0211\u0212\7f\2"+
+ "\2\u0212\u0213\7h\2\2\u0213\u0098\3\2\2\2\u0214\u0215\7t\2\2\u0215\u0216"+
+ "\7n\2\2\u0216\u0217\7r\2\2\u0217\u0218\7f\2\2\u0218\u009a\3\2\2\2\u0219"+
+ "\u021a\7n\2\2\u021a\u021b\7f\2\2\u021b\u021c\7c\2\2\u021c\u009c\3\2\2"+
+ "\2\u021d\u021e\7y\2\2\u021e\u021f\7e\2\2\u021f\u0220\7i\2\2\u0220\u0221"+
+ "\7c\2\2\u0221\u009e\3\2\2\2\u0222\u0223\7t\2\2\u0223\u0224\7c\2\2\u0224"+
+ "\u0225\7g\2\2\u0225\u0226\7h\2\2\u0226\u00a0\3\2\2\2\u0227\u0228\7d\2"+
+ "\2\u0228\u0229\7g\2\2\u0229\u022a\7i\2\2\u022a\u00a2\3\2\2\2\u022b\u022c"+
+ "\7u\2\2\u022c\u022d\7r\2\2\u022d\u022e\7d\2\2\u022e\u00a4\3\2\2\2\u022f"+
+ "\u0230\7e\2\2\u0230\u0231\7r\2\2\u0231\u0232\7d\2\2\u0232\u00a6\3\2\2"+
+ "\2\u0233\u0234\7n\2\2\u0234\u0235\7r\2\2\u0235\u0236\7d\2\2\u0236\u00a8"+
+ "\3\2\2\2\u0237\u0238\7y\2\2\u0238\u0239\7d\2\2\u0239\u023a\7n\2\2\u023a"+
+ "\u00aa\3\2\2\2\u023b\u023c\7f\2\2\u023c\u023d\7r\2\2\u023d\u023e\7t\2"+
+ "\2\u023e\u023f\7u\2\2\u023f\u00ac\3\2\2\2\u0240\u0241\7f\2\2\u0241\u0242"+
+ "\7r\2\2\u0242\u0243\7u\2\2\u0243\u0244\7h\2\2\u0244\u00ae\3\2\2\2\u0245"+
+ "\u0246\7f\2\2\u0246\u0247\7r\2\2\u0247\u0248\7e\2\2\u0248\u0249\7h\2\2"+
+ "\u0249\u00b0\3\2\2\2\u024a\u024b\7f\2\2\u024b\u024c\7r\2\2\u024c\u024d"+
+ "\7t\2\2\u024d\u024e\7e\2\2\u024e\u00b2\3\2\2\2\u024f\u0250\7e\2\2\u0250"+
+ "\u0251\7t\2\2\u0251\u0252\7u\2\2\u0252\u0253\7h\2\2\u0253\u00b4\3\2\2"+
+ "\2\u0254\u0255\7e\2\2\u0255\u0256\7t\2\2\u0256\u0257\7t\2\2\u0257\u0258"+
+ "\7d\2\2\u0258\u00b6\3\2\2\2\u0259\u025a\7u\2\2\u025a\u025b\7{\2\2\u025b"+
+ "\u025c\7u\2\2\u025c\u00b8\3\2\2\2\u025d\u025e\7e\2\2\u025e\u025f\7|\2"+
+ "\2\u025f\u0260\7o\2\2\u0260\u00ba\3\2\2\2\u0261\u0262\7k\2\2\u0262\u0263"+
+ "\7t\2\2\u0263\u0264\7u\2\2\u0264\u0265\7u\2\2\u0265\u00bc\3\2\2\2\u0266"+
+ "\u0267\7f\2\2\u0267\u0268\7u\2\2\u0268\u0269\7o\2\2\u0269\u00be\3\2\2"+
+ "\2\u026a\u026b\7\60\2\2\u026b\u00c0\3\2\2\2\u026c\u026d\7\60\2\2\u026d"+
+ "\u026e\7\60\2\2\u026e\u00c2\3\2\2\2\u026f\u0270\7-\2\2\u0270\u00c4\3\2"+
+ "\2\2\u0271\u0272\7/\2\2\u0272\u00c6\3\2\2\2\u0273\u0274\7,\2\2\u0274\u00c8"+
+ "\3\2\2\2\u0275\u0276\7\61\2\2\u0276\u00ca\3\2\2\2\u0277\u0279\t\2\2\2"+
+ "\u0278\u0277\3\2\2\2\u0279\u027a\3\2\2\2\u027a\u0278\3\2\2\2\u027a\u027b"+
+ "\3\2\2\2\u027b\u027c\3\2\2\2\u027c\u027d\7<\2\2\u027d\u00cc\3\2\2\2\u027e"+
+ "\u0282\t\3\2\2\u027f\u0281\t\2\2\2\u0280\u027f\3\2\2\2\u0281\u0284\3\2"+
+ "\2\2\u0282\u0280\3\2\2\2\u0282\u0283\3\2\2\2\u0283\u00ce\3\2\2\2\u0284"+
+ "\u0282\3\2\2\2\u0285\u0289\t\4\2\2\u0286\u0288\t\5\2\2\u0287\u0286\3\2"+
+ "\2\2\u0288\u028b\3\2\2\2\u0289\u0287\3\2\2\2\u0289\u028a\3\2\2\2\u028a"+
+ "\u00d0\3\2\2\2\u028b\u0289\3\2\2\2\u028c\u028e\7f\2\2\u028d\u028f\t\4"+
+ "\2\2\u028e\u028d\3\2\2\2\u028f\u0290\3\2\2\2\u0290\u028e\3\2\2\2\u0290"+
+ "\u0291\3\2\2\2\u0291\u00d2\3\2\2\2\u0292\u0294\7q\2\2\u0293\u0295\t\6"+
+ "\2\2\u0294\u0293\3\2\2\2\u0295\u0296\3\2\2\2\u0296\u0294\3\2\2\2\u0296"+
+ "\u0297\3\2\2\2\u0297\u00d4\3\2\2\2\u0298\u0299\7f\2\2\u0299\u029a\7o\2"+
+ "\2\u029a\u029c\3\2\2\2\u029b\u029d\t\4\2\2\u029c\u029b\3\2\2\2\u029d\u029e"+
+ "\3\2\2\2\u029e\u029c\3\2\2\2\u029e\u029f\3\2\2\2\u029f\u00d6\3\2\2\2\u02a0"+
+ "\u02a4\7>\2\2\u02a1\u02a3\t\7\2\2\u02a2\u02a1\3\2\2\2\u02a3\u02a6\3\2"+
+ "\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a5\3\2\2\2\u02a5\u00d8\3\2\2\2\u02a6"+
+ "\u02a4\3\2\2\2\u02a7\u02ab\7$\2\2\u02a8\u02aa\n\b\2\2\u02a9\u02a8\3\2"+
+ "\2\2\u02aa\u02ad\3\2\2\2\u02ab\u02a9\3\2\2\2\u02ab\u02ac\3\2\2\2\u02ac"+
+ "\u00da\3\2\2\2\u02ad\u02ab\3\2\2\2\u02ae\u02b0\t\b\2\2\u02af\u02ae\3\2"+
+ "\2\2\u02b0\u02b1\3\2\2\2\u02b1\u02af\3\2\2\2\u02b1\u02b2\3\2\2\2\u02b2"+
+ "\u00dc\3\2\2\2\u02b3\u02b4\t\t\2\2\u02b4\u02b5\3\2\2\2\u02b5\u02b6\bo"+
+ "\2\2\u02b6\u00de\3\2\2\2\f\2\u027a\u0282\u0289\u0290\u0296\u029e\u02a4"+
+ "\u02ab\u02b1\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);
+ }
+ }
+}
\ No newline at end of file
diff --git a/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7Listener.java b/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7Listener.java
new file mode 100644
index 0000000..43e9afe
--- /dev/null
+++ b/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7Listener.java
@@ -0,0 +1,181 @@
+// Generated from com/khubla/pdp7parse/antlr4/pdp7.g4 by ANTLR 4.5
+package com.khubla.pdp7parse.antlr4;
+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 pdp7Parser}.
+ */
+public interface pdp7Listener extends ParseTreeListener {
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#prog}.
+ * @param ctx the parse tree
+ */
+ void enterProg(pdp7Parser.ProgContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#prog}.
+ * @param ctx the parse tree
+ */
+ void exitProg(pdp7Parser.ProgContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#line}.
+ * @param ctx the parse tree
+ */
+ void enterLine(pdp7Parser.LineContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#line}.
+ * @param ctx the parse tree
+ */
+ void exitLine(pdp7Parser.LineContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#declarations}.
+ * @param ctx the parse tree
+ */
+ void enterDeclarations(pdp7Parser.DeclarationsContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#declarations}.
+ * @param ctx the parse tree
+ */
+ void exitDeclarations(pdp7Parser.DeclarationsContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#declaration}.
+ * @param ctx the parse tree
+ */
+ void enterDeclaration(pdp7Parser.DeclarationContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#declaration}.
+ * @param ctx the parse tree
+ */
+ void exitDeclaration(pdp7Parser.DeclarationContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#instruction}.
+ * @param ctx the parse tree
+ */
+ void enterInstruction(pdp7Parser.InstructionContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#instruction}.
+ * @param ctx the parse tree
+ */
+ void exitInstruction(pdp7Parser.InstructionContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#argument}.
+ * @param ctx the parse tree
+ */
+ void enterArgument(pdp7Parser.ArgumentContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#argument}.
+ * @param ctx the parse tree
+ */
+ void exitArgument(pdp7Parser.ArgumentContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#assignment}.
+ * @param ctx the parse tree
+ */
+ void enterAssignment(pdp7Parser.AssignmentContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#assignment}.
+ * @param ctx the parse tree
+ */
+ void exitAssignment(pdp7Parser.AssignmentContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#expression}.
+ * @param ctx the parse tree
+ */
+ void enterExpression(pdp7Parser.ExpressionContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#expression}.
+ * @param ctx the parse tree
+ */
+ void exitExpression(pdp7Parser.ExpressionContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#multiplyingExpression}.
+ * @param ctx the parse tree
+ */
+ void enterMultiplyingExpression(pdp7Parser.MultiplyingExpressionContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#multiplyingExpression}.
+ * @param ctx the parse tree
+ */
+ void exitMultiplyingExpression(pdp7Parser.MultiplyingExpressionContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#atom}.
+ * @param ctx the parse tree
+ */
+ void enterAtom(pdp7Parser.AtomContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#atom}.
+ * @param ctx the parse tree
+ */
+ void exitAtom(pdp7Parser.AtomContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#string}.
+ * @param ctx the parse tree
+ */
+ void enterString(pdp7Parser.StringContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#string}.
+ * @param ctx the parse tree
+ */
+ void exitString(pdp7Parser.StringContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#signednumber}.
+ * @param ctx the parse tree
+ */
+ void enterSignednumber(pdp7Parser.SignednumberContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#signednumber}.
+ * @param ctx the parse tree
+ */
+ void exitSignednumber(pdp7Parser.SignednumberContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#eol}.
+ * @param ctx the parse tree
+ */
+ void enterEol(pdp7Parser.EolContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#eol}.
+ * @param ctx the parse tree
+ */
+ void exitEol(pdp7Parser.EolContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#comment}.
+ * @param ctx the parse tree
+ */
+ void enterComment(pdp7Parser.CommentContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#comment}.
+ * @param ctx the parse tree
+ */
+ void exitComment(pdp7Parser.CommentContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#label}.
+ * @param ctx the parse tree
+ */
+ void enterLabel(pdp7Parser.LabelContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#label}.
+ * @param ctx the parse tree
+ */
+ void exitLabel(pdp7Parser.LabelContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#variable}.
+ * @param ctx the parse tree
+ */
+ void enterVariable(pdp7Parser.VariableContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#variable}.
+ * @param ctx the parse tree
+ */
+ void exitVariable(pdp7Parser.VariableContext ctx);
+ /**
+ * Enter a parse tree produced by {@link pdp7Parser#opcode}.
+ * @param ctx the parse tree
+ */
+ void enterOpcode(pdp7Parser.OpcodeContext ctx);
+ /**
+ * Exit a parse tree produced by {@link pdp7Parser#opcode}.
+ * @param ctx the parse tree
+ */
+ void exitOpcode(pdp7Parser.OpcodeContext ctx);
+}
\ No newline at end of file
diff --git a/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7Parser.java b/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7Parser.java
new file mode 100644
index 0000000..3c9f9bd
--- /dev/null
+++ b/pdp7parse/src/main/java/com/khubla/pdp7parse/antlr4/pdp7Parser.java
@@ -0,0 +1,1179 @@
+// Generated from com/khubla/pdp7parse/antlr4/pdp7.g4 by ANTLR 4.5
+package com.khubla.pdp7parse.antlr4;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.misc.*;
+import org.antlr.v4.runtime.tree.*;
+import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class pdp7Parser extends Parser {
+ static { RuntimeMetaData.checkVersion("4.5", RuntimeMetaData.VERSION); }
+
+ protected static final DFA[] _decisionToDFA;
+ protected static final PredictionContextCache _sharedContextCache =
+ new PredictionContextCache();
+ public static final int
+ T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
+ T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
+ T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
+ T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31,
+ T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38,
+ T__38=39, T__39=40, T__40=41, T__41=42, T__42=43, T__43=44, T__44=45,
+ T__45=46, T__46=47, T__47=48, T__48=49, T__49=50, T__50=51, T__51=52,
+ T__52=53, T__53=54, T__54=55, T__55=56, T__56=57, T__57=58, T__58=59,
+ T__59=60, T__60=61, T__61=62, T__62=63, T__63=64, T__64=65, T__65=66,
+ T__66=67, T__67=68, T__68=69, T__69=70, T__70=71, T__71=72, T__72=73,
+ T__73=74, T__74=75, T__75=76, T__76=77, T__77=78, T__78=79, T__79=80,
+ T__80=81, T__81=82, T__82=83, T__83=84, T__84=85, T__85=86, T__86=87,
+ T__87=88, T__88=89, T__89=90, T__90=91, T__91=92, T__92=93, T__93=94,
+ LOC=95, RELOC=96, PLUS=97, MINUS=98, TIMES=99, DIV=100, LABEL=101, IDENTIFIER=102,
+ NUMERIC_LITERAL=103, DECIMAL=104, OCTAL=105, DECIMAL_MINUS=106, STRING=107,
+ COMMENT=108, EOL=109, WS=110;
+ public static final int
+ RULE_prog = 0, RULE_line = 1, RULE_declarations = 2, RULE_declaration = 3,
+ RULE_instruction = 4, RULE_argument = 5, RULE_assignment = 6, RULE_expression = 7,
+ RULE_multiplyingExpression = 8, RULE_atom = 9, RULE_string = 10, RULE_signednumber = 11,
+ RULE_eol = 12, RULE_comment = 13, RULE_label = 14, RULE_variable = 15,
+ RULE_opcode = 16;
+ public static final String[] ruleNames = {
+ "prog", "line", "declarations", "declaration", "instruction", "argument",
+ "assignment", "expression", "multiplyingExpression", "atom", "string",
+ "signednumber", "eol", "comment", "label", "variable", "opcode"
+ };
+
+ private static final String[] _LITERAL_NAMES = {
+ null, "';'", "'='", "'>'", "'dac'", "'jms'", "'dzm'", "'lac'", "'xor'",
+ "'add'", "'tad'", "'xct'", "'isz'", "'and'", "'sad'", "'jmp'", "'nop'",
+ "'law'", "'cma'", "'las'", "'ral'", "'rar'", "'hlt'", "'sma'", "'sza'",
+ "'snl'", "'skp'", "'sna'", "'szl'", "'rtl'", "'rtr'", "'cil'", "'rcl'",
+ "'rcr'", "'cia'", "'lrs'", "'lrss'", "'lls'", "'llss'", "'als'", "'alss'",
+ "'mul'", "'idiv'", "'lacq'", "'clq'", "'omq'", "'cmq'", "'lmq'", "'dscs'",
+ "'dslw'", "'dslm'", "'dsld'", "'dsls'", "'dssf'", "'dsrs'", "'iof'", "'ion'",
+ "'caf'", "'clon'", "'clsf'", "'clof'", "'ksf'", "'krb'", "'tsf'", "'tcf'",
+ "'tls'", "'sck'", "'cck'", "'lck'", "'rsf'", "'rsa'", "'rrb'", "'psf'",
+ "'pcf'", "'psa'", "'cdf'", "'rlpd'", "'lda'", "'wcga'", "'raef'", "'beg'",
+ "'spb'", "'cpb'", "'lpb'", "'wbl'", "'dprs'", "'dpsf'", "'dpcf'", "'dprc'",
+ "'crsf'", "'crrb'", "'sys'", "'czm'", "'irss'", "'dsm'", "'.'", "'..'",
+ "'+'", "'-'", "'*'", "'/'"
+ };
+ private static final String[] _SYMBOLIC_NAMES = {
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, null,
+ null, null, null, null, null, null, null, null, null, null, null, "LOC",
+ "RELOC", "PLUS", "MINUS", "TIMES", "DIV", "LABEL", "IDENTIFIER", "NUMERIC_LITERAL",
+ "DECIMAL", "OCTAL", "DECIMAL_MINUS", "STRING", "COMMENT", "EOL", "WS"
+ };
+ 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] = "";
+ }
+ }
+ }
+
+ @Override
+ @Deprecated
+ public String[] getTokenNames() {
+ return tokenNames;
+ }
+
+ @Override
+
+ public Vocabulary getVocabulary() {
+ return VOCABULARY;
+ }
+
+ @Override
+ public String getGrammarFileName() { return "pdp7.g4"; }
+
+ @Override
+ public String[] getRuleNames() { return ruleNames; }
+
+ @Override
+ public String getSerializedATN() { return _serializedATN; }
+
+ @Override
+ public ATN getATN() { return _ATN; }
+
+ public pdp7Parser(TokenStream input) {
+ super(input);
+ _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+ }
+ public static class ProgContext extends ParserRuleContext {
+ public List line() {
+ return getRuleContexts(LineContext.class);
+ }
+ public LineContext line(int i) {
+ return getRuleContext(LineContext.class,i);
+ }
+ public ProgContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_prog; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterProg(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitProg(this);
+ }
+ }
+
+ public final ProgContext prog() throws RecognitionException {
+ ProgContext _localctx = new ProgContext(_ctx, getState());
+ enterRule(_localctx, 0, RULE_prog);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(35);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ do {
+ {
+ {
+ setState(34);
+ line();
+ }
+ }
+ setState(37);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__44) | (1L << T__45) | (1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54) | (1L << T__55) | (1L << T__56) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61) | (1L << T__62))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (T__64 - 64)) | (1L << (T__65 - 64)) | (1L << (T__66 - 64)) | (1L << (T__67 - 64)) | (1L << (T__68 - 64)) | (1L << (T__69 - 64)) | (1L << (T__70 - 64)) | (1L << (T__71 - 64)) | (1L << (T__72 - 64)) | (1L << (T__73 - 64)) | (1L << (T__74 - 64)) | (1L << (T__75 - 64)) | (1L << (T__76 - 64)) | (1L << (T__77 - 64)) | (1L << (T__78 - 64)) | (1L << (T__79 - 64)) | (1L << (T__80 - 64)) | (1L << (T__81 - 64)) | (1L << (T__82 - 64)) | (1L << (T__83 - 64)) | (1L << (T__84 - 64)) | (1L << (T__85 - 64)) | (1L << (T__86 - 64)) | (1L << (T__87 - 64)) | (1L << (T__88 - 64)) | (1L << (T__89 - 64)) | (1L << (T__90 - 64)) | (1L << (T__91 - 64)) | (1L << (T__92 - 64)) | (1L << (T__93 - 64)) | (1L << (LOC - 64)) | (1L << (RELOC - 64)) | (1L << (MINUS - 64)) | (1L << (LABEL - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (NUMERIC_LITERAL - 64)) | (1L << (DECIMAL - 64)) | (1L << (OCTAL - 64)) | (1L << (DECIMAL_MINUS - 64)) | (1L << (STRING - 64)) | (1L << (COMMENT - 64)) | (1L << (EOL - 64)))) != 0) );
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LineContext extends ParserRuleContext {
+ public EolContext eol() {
+ return getRuleContext(EolContext.class,0);
+ }
+ public DeclarationsContext declarations() {
+ return getRuleContext(DeclarationsContext.class,0);
+ }
+ public CommentContext comment() {
+ return getRuleContext(CommentContext.class,0);
+ }
+ public LineContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_line; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterLine(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitLine(this);
+ }
+ }
+
+ public final LineContext line() throws RecognitionException {
+ LineContext _localctx = new LineContext(_ctx, getState());
+ enterRule(_localctx, 2, RULE_line);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(40);
+ switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
+ case 1:
+ {
+ setState(39);
+ declarations();
+ }
+ break;
+ }
+ setState(43);
+ _la = _input.LA(1);
+ if (_la==COMMENT) {
+ {
+ setState(42);
+ comment();
+ }
+ }
+
+ setState(45);
+ eol();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class DeclarationsContext extends ParserRuleContext {
+ public List declaration() {
+ return getRuleContexts(DeclarationContext.class);
+ }
+ public DeclarationContext declaration(int i) {
+ return getRuleContext(DeclarationContext.class,i);
+ }
+ public DeclarationsContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_declarations; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterDeclarations(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitDeclarations(this);
+ }
+ }
+
+ public final DeclarationsContext declarations() throws RecognitionException {
+ DeclarationsContext _localctx = new DeclarationsContext(_ctx, getState());
+ enterRule(_localctx, 4, RULE_declarations);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(47);
+ declaration();
+ setState(52);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==T__0) {
+ {
+ {
+ setState(48);
+ match(T__0);
+ setState(49);
+ declaration();
+ }
+ }
+ setState(54);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class DeclarationContext extends ParserRuleContext {
+ public List label() {
+ return getRuleContexts(LabelContext.class);
+ }
+ public LabelContext label(int i) {
+ return getRuleContext(LabelContext.class,i);
+ }
+ public List instruction() {
+ return getRuleContexts(InstructionContext.class);
+ }
+ public InstructionContext instruction(int i) {
+ return getRuleContext(InstructionContext.class,i);
+ }
+ public List assignment() {
+ return getRuleContexts(AssignmentContext.class);
+ }
+ public AssignmentContext assignment(int i) {
+ return getRuleContext(AssignmentContext.class,i);
+ }
+ public List expression() {
+ return getRuleContexts(ExpressionContext.class);
+ }
+ public ExpressionContext expression(int i) {
+ return getRuleContext(ExpressionContext.class,i);
+ }
+ public DeclarationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_declaration; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterDeclaration(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitDeclaration(this);
+ }
+ }
+
+ public final DeclarationContext declaration() throws RecognitionException {
+ DeclarationContext _localctx = new DeclarationContext(_ctx, getState());
+ enterRule(_localctx, 6, RULE_declaration);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(58);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==LABEL) {
+ {
+ {
+ setState(55);
+ label();
+ }
+ }
+ setState(60);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(66);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__44) | (1L << T__45) | (1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54) | (1L << T__55) | (1L << T__56) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61) | (1L << T__62))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (T__64 - 64)) | (1L << (T__65 - 64)) | (1L << (T__66 - 64)) | (1L << (T__67 - 64)) | (1L << (T__68 - 64)) | (1L << (T__69 - 64)) | (1L << (T__70 - 64)) | (1L << (T__71 - 64)) | (1L << (T__72 - 64)) | (1L << (T__73 - 64)) | (1L << (T__74 - 64)) | (1L << (T__75 - 64)) | (1L << (T__76 - 64)) | (1L << (T__77 - 64)) | (1L << (T__78 - 64)) | (1L << (T__79 - 64)) | (1L << (T__80 - 64)) | (1L << (T__81 - 64)) | (1L << (T__82 - 64)) | (1L << (T__83 - 64)) | (1L << (T__84 - 64)) | (1L << (T__85 - 64)) | (1L << (T__86 - 64)) | (1L << (T__87 - 64)) | (1L << (T__88 - 64)) | (1L << (T__89 - 64)) | (1L << (T__90 - 64)) | (1L << (T__91 - 64)) | (1L << (T__92 - 64)) | (1L << (T__93 - 64)) | (1L << (LOC - 64)) | (1L << (RELOC - 64)) | (1L << (MINUS - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (NUMERIC_LITERAL - 64)) | (1L << (DECIMAL - 64)) | (1L << (OCTAL - 64)) | (1L << (DECIMAL_MINUS - 64)) | (1L << (STRING - 64)))) != 0)) {
+ {
+ setState(64);
+ switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) {
+ case 1:
+ {
+ setState(61);
+ instruction();
+ }
+ break;
+ case 2:
+ {
+ setState(62);
+ assignment();
+ }
+ break;
+ case 3:
+ {
+ setState(63);
+ expression();
+ }
+ break;
+ }
+ }
+ setState(68);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class InstructionContext extends ParserRuleContext {
+ public OpcodeContext opcode() {
+ return getRuleContext(OpcodeContext.class,0);
+ }
+ public List argument() {
+ return getRuleContexts(ArgumentContext.class);
+ }
+ public ArgumentContext argument(int i) {
+ return getRuleContext(ArgumentContext.class,i);
+ }
+ public InstructionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_instruction; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterInstruction(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitInstruction(this);
+ }
+ }
+
+ public final InstructionContext instruction() throws RecognitionException {
+ InstructionContext _localctx = new InstructionContext(_ctx, getState());
+ enterRule(_localctx, 8, RULE_instruction);
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(69);
+ opcode();
+ setState(73);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,7,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(70);
+ argument();
+ }
+ }
+ }
+ setState(75);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,7,_ctx);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ArgumentContext extends ParserRuleContext {
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public ArgumentContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_argument; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterArgument(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitArgument(this);
+ }
+ }
+
+ public final ArgumentContext argument() throws RecognitionException {
+ ArgumentContext _localctx = new ArgumentContext(_ctx, getState());
+ enterRule(_localctx, 10, RULE_argument);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(76);
+ expression();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AssignmentContext extends ParserRuleContext {
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public VariableContext variable() {
+ return getRuleContext(VariableContext.class,0);
+ }
+ public TerminalNode LOC() { return getToken(pdp7Parser.LOC, 0); }
+ public TerminalNode RELOC() { return getToken(pdp7Parser.RELOC, 0); }
+ public AssignmentContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_assignment; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterAssignment(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitAssignment(this);
+ }
+ }
+
+ public final AssignmentContext assignment() throws RecognitionException {
+ AssignmentContext _localctx = new AssignmentContext(_ctx, getState());
+ enterRule(_localctx, 12, RULE_assignment);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(81);
+ switch (_input.LA(1)) {
+ case IDENTIFIER:
+ {
+ setState(78);
+ variable();
+ }
+ break;
+ case LOC:
+ {
+ setState(79);
+ match(LOC);
+ }
+ break;
+ case RELOC:
+ {
+ setState(80);
+ match(RELOC);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ setState(83);
+ match(T__1);
+ setState(84);
+ expression();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ExpressionContext extends ParserRuleContext {
+ public List multiplyingExpression() {
+ return getRuleContexts(MultiplyingExpressionContext.class);
+ }
+ public MultiplyingExpressionContext multiplyingExpression(int i) {
+ return getRuleContext(MultiplyingExpressionContext.class,i);
+ }
+ public List PLUS() { return getTokens(pdp7Parser.PLUS); }
+ public TerminalNode PLUS(int i) {
+ return getToken(pdp7Parser.PLUS, i);
+ }
+ public List MINUS() { return getTokens(pdp7Parser.MINUS); }
+ public TerminalNode MINUS(int i) {
+ return getToken(pdp7Parser.MINUS, i);
+ }
+ public ExpressionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_expression; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterExpression(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitExpression(this);
+ }
+ }
+
+ public final ExpressionContext expression() throws RecognitionException {
+ ExpressionContext _localctx = new ExpressionContext(_ctx, getState());
+ enterRule(_localctx, 14, RULE_expression);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(86);
+ multiplyingExpression();
+ setState(91);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,9,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(87);
+ _la = _input.LA(1);
+ if ( !(_la==PLUS || _la==MINUS) ) {
+ _errHandler.recoverInline(this);
+ } else {
+ consume();
+ }
+ setState(88);
+ multiplyingExpression();
+ }
+ }
+ }
+ setState(93);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,9,_ctx);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class MultiplyingExpressionContext extends ParserRuleContext {
+ public List atom() {
+ return getRuleContexts(AtomContext.class);
+ }
+ public AtomContext atom(int i) {
+ return getRuleContext(AtomContext.class,i);
+ }
+ public List TIMES() { return getTokens(pdp7Parser.TIMES); }
+ public TerminalNode TIMES(int i) {
+ return getToken(pdp7Parser.TIMES, i);
+ }
+ public List DIV() { return getTokens(pdp7Parser.DIV); }
+ public TerminalNode DIV(int i) {
+ return getToken(pdp7Parser.DIV, i);
+ }
+ public MultiplyingExpressionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_multiplyingExpression; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterMultiplyingExpression(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitMultiplyingExpression(this);
+ }
+ }
+
+ public final MultiplyingExpressionContext multiplyingExpression() throws RecognitionException {
+ MultiplyingExpressionContext _localctx = new MultiplyingExpressionContext(_ctx, getState());
+ enterRule(_localctx, 16, RULE_multiplyingExpression);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(94);
+ atom();
+ setState(99);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==TIMES || _la==DIV) {
+ {
+ {
+ setState(95);
+ _la = _input.LA(1);
+ if ( !(_la==TIMES || _la==DIV) ) {
+ _errHandler.recoverInline(this);
+ } else {
+ consume();
+ }
+ setState(96);
+ atom();
+ }
+ }
+ setState(101);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class AtomContext extends ParserRuleContext {
+ public VariableContext variable() {
+ return getRuleContext(VariableContext.class,0);
+ }
+ public TerminalNode LOC() { return getToken(pdp7Parser.LOC, 0); }
+ public TerminalNode RELOC() { return getToken(pdp7Parser.RELOC, 0); }
+ public StringContext string() {
+ return getRuleContext(StringContext.class,0);
+ }
+ public TerminalNode DECIMAL() { return getToken(pdp7Parser.DECIMAL, 0); }
+ public TerminalNode DECIMAL_MINUS() { return getToken(pdp7Parser.DECIMAL_MINUS, 0); }
+ public TerminalNode OCTAL() { return getToken(pdp7Parser.OCTAL, 0); }
+ public SignednumberContext signednumber() {
+ return getRuleContext(SignednumberContext.class,0);
+ }
+ public AtomContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_atom; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterAtom(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitAtom(this);
+ }
+ }
+
+ public final AtomContext atom() throws RecognitionException {
+ AtomContext _localctx = new AtomContext(_ctx, getState());
+ enterRule(_localctx, 18, RULE_atom);
+ try {
+ setState(110);
+ switch (_input.LA(1)) {
+ case IDENTIFIER:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(102);
+ variable();
+ }
+ break;
+ case LOC:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(103);
+ match(LOC);
+ }
+ break;
+ case RELOC:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(104);
+ match(RELOC);
+ }
+ break;
+ case STRING:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(105);
+ string();
+ }
+ break;
+ case DECIMAL:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(106);
+ match(DECIMAL);
+ }
+ break;
+ case DECIMAL_MINUS:
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(107);
+ match(DECIMAL_MINUS);
+ }
+ break;
+ case OCTAL:
+ enterOuterAlt(_localctx, 7);
+ {
+ setState(108);
+ match(OCTAL);
+ }
+ break;
+ case MINUS:
+ case NUMERIC_LITERAL:
+ enterOuterAlt(_localctx, 8);
+ {
+ setState(109);
+ signednumber();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class StringContext extends ParserRuleContext {
+ public TerminalNode STRING() { return getToken(pdp7Parser.STRING, 0); }
+ public List NUMERIC_LITERAL() { return getTokens(pdp7Parser.NUMERIC_LITERAL); }
+ public TerminalNode NUMERIC_LITERAL(int i) {
+ return getToken(pdp7Parser.NUMERIC_LITERAL, i);
+ }
+ public StringContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_string; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterString(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitString(this);
+ }
+ }
+
+ public final StringContext string() throws RecognitionException {
+ StringContext _localctx = new StringContext(_ctx, getState());
+ enterRule(_localctx, 20, RULE_string);
+ int _la;
+ try {
+ int _alt;
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(112);
+ match(STRING);
+ setState(116);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,12,_ctx);
+ while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+ if ( _alt==1 ) {
+ {
+ {
+ setState(113);
+ match(NUMERIC_LITERAL);
+ }
+ }
+ }
+ setState(118);
+ _errHandler.sync(this);
+ _alt = getInterpreter().adaptivePredict(_input,12,_ctx);
+ }
+ setState(120);
+ _la = _input.LA(1);
+ if (_la==T__2) {
+ {
+ setState(119);
+ match(T__2);
+ }
+ }
+
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class SignednumberContext extends ParserRuleContext {
+ public TerminalNode NUMERIC_LITERAL() { return getToken(pdp7Parser.NUMERIC_LITERAL, 0); }
+ public SignednumberContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_signednumber; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterSignednumber(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitSignednumber(this);
+ }
+ }
+
+ public final SignednumberContext signednumber() throws RecognitionException {
+ SignednumberContext _localctx = new SignednumberContext(_ctx, getState());
+ enterRule(_localctx, 22, RULE_signednumber);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(123);
+ _la = _input.LA(1);
+ if (_la==MINUS) {
+ {
+ setState(122);
+ match(MINUS);
+ }
+ }
+
+ setState(125);
+ match(NUMERIC_LITERAL);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class EolContext extends ParserRuleContext {
+ public TerminalNode EOL() { return getToken(pdp7Parser.EOL, 0); }
+ public EolContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_eol; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterEol(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitEol(this);
+ }
+ }
+
+ public final EolContext eol() throws RecognitionException {
+ EolContext _localctx = new EolContext(_ctx, getState());
+ enterRule(_localctx, 24, RULE_eol);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(127);
+ match(EOL);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class CommentContext extends ParserRuleContext {
+ public TerminalNode COMMENT() { return getToken(pdp7Parser.COMMENT, 0); }
+ public CommentContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_comment; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterComment(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitComment(this);
+ }
+ }
+
+ public final CommentContext comment() throws RecognitionException {
+ CommentContext _localctx = new CommentContext(_ctx, getState());
+ enterRule(_localctx, 26, RULE_comment);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(129);
+ match(COMMENT);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class LabelContext extends ParserRuleContext {
+ public TerminalNode LABEL() { return getToken(pdp7Parser.LABEL, 0); }
+ public LabelContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_label; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterLabel(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitLabel(this);
+ }
+ }
+
+ public final LabelContext label() throws RecognitionException {
+ LabelContext _localctx = new LabelContext(_ctx, getState());
+ enterRule(_localctx, 28, RULE_label);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(131);
+ match(LABEL);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class VariableContext extends ParserRuleContext {
+ public TerminalNode IDENTIFIER() { return getToken(pdp7Parser.IDENTIFIER, 0); }
+ public VariableContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_variable; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterVariable(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitVariable(this);
+ }
+ }
+
+ public final VariableContext variable() throws RecognitionException {
+ VariableContext _localctx = new VariableContext(_ctx, getState());
+ enterRule(_localctx, 30, RULE_variable);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(133);
+ match(IDENTIFIER);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class OpcodeContext extends ParserRuleContext {
+ public OpcodeContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_opcode; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).enterOpcode(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof pdp7Listener ) ((pdp7Listener)listener).exitOpcode(this);
+ }
+ }
+
+ public final OpcodeContext opcode() throws RecognitionException {
+ OpcodeContext _localctx = new OpcodeContext(_ctx, getState());
+ enterRule(_localctx, 32, RULE_opcode);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(135);
+ _la = _input.LA(1);
+ if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__14) | (1L << T__15) | (1L << T__16) | (1L << T__17) | (1L << T__18) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << T__26) | (1L << T__27) | (1L << T__28) | (1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << T__44) | (1L << T__45) | (1L << T__46) | (1L << T__47) | (1L << T__48) | (1L << T__49) | (1L << T__50) | (1L << T__51) | (1L << T__52) | (1L << T__53) | (1L << T__54) | (1L << T__55) | (1L << T__56) | (1L << T__57) | (1L << T__58) | (1L << T__59) | (1L << T__60) | (1L << T__61) | (1L << T__62))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (T__63 - 64)) | (1L << (T__64 - 64)) | (1L << (T__65 - 64)) | (1L << (T__66 - 64)) | (1L << (T__67 - 64)) | (1L << (T__68 - 64)) | (1L << (T__69 - 64)) | (1L << (T__70 - 64)) | (1L << (T__71 - 64)) | (1L << (T__72 - 64)) | (1L << (T__73 - 64)) | (1L << (T__74 - 64)) | (1L << (T__75 - 64)) | (1L << (T__76 - 64)) | (1L << (T__77 - 64)) | (1L << (T__78 - 64)) | (1L << (T__79 - 64)) | (1L << (T__80 - 64)) | (1L << (T__81 - 64)) | (1L << (T__82 - 64)) | (1L << (T__83 - 64)) | (1L << (T__84 - 64)) | (1L << (T__85 - 64)) | (1L << (T__86 - 64)) | (1L << (T__87 - 64)) | (1L << (T__88 - 64)) | (1L << (T__89 - 64)) | (1L << (T__90 - 64)) | (1L << (T__91 - 64)) | (1L << (T__92 - 64)) | (1L << (T__93 - 64)))) != 0)) ) {
+ _errHandler.recoverInline(this);
+ } else {
+ consume();
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static final String _serializedATN =
+ "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3p\u008c\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"+
+ "\3\2\6\2&\n\2\r\2\16\2\'\3\3\5\3+\n\3\3\3\5\3.\n\3\3\3\3\3\3\4\3\4\3\4"+
+ "\7\4\65\n\4\f\4\16\48\13\4\3\5\7\5;\n\5\f\5\16\5>\13\5\3\5\3\5\3\5\7\5"+
+ "C\n\5\f\5\16\5F\13\5\3\6\3\6\7\6J\n\6\f\6\16\6M\13\6\3\7\3\7\3\b\3\b\3"+
+ "\b\5\bT\n\b\3\b\3\b\3\b\3\t\3\t\3\t\7\t\\\n\t\f\t\16\t_\13\t\3\n\3\n\3"+
+ "\n\7\nd\n\n\f\n\16\ng\13\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\5\13"+
+ "q\n\13\3\f\3\f\7\fu\n\f\f\f\16\fx\13\f\3\f\5\f{\n\f\3\r\5\r~\n\r\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\22\2\2\23\2\4\6"+
+ "\b\n\f\16\20\22\24\26\30\32\34\36 \"\2\5\3\2cd\3\2ef\3\2\6`\u0091\2%\3"+
+ "\2\2\2\4*\3\2\2\2\6\61\3\2\2\2\b<\3\2\2\2\nG\3\2\2\2\fN\3\2\2\2\16S\3"+
+ "\2\2\2\20X\3\2\2\2\22`\3\2\2\2\24p\3\2\2\2\26r\3\2\2\2\30}\3\2\2\2\32"+
+ "\u0081\3\2\2\2\34\u0083\3\2\2\2\36\u0085\3\2\2\2 \u0087\3\2\2\2\"\u0089"+
+ "\3\2\2\2$&\5\4\3\2%$\3\2\2\2&\'\3\2\2\2\'%\3\2\2\2\'(\3\2\2\2(\3\3\2\2"+
+ "\2)+\5\6\4\2*)\3\2\2\2*+\3\2\2\2+-\3\2\2\2,.\5\34\17\2-,\3\2\2\2-.\3\2"+
+ "\2\2./\3\2\2\2/\60\5\32\16\2\60\5\3\2\2\2\61\66\5\b\5\2\62\63\7\3\2\2"+
+ "\63\65\5\b\5\2\64\62\3\2\2\2\658\3\2\2\2\66\64\3\2\2\2\66\67\3\2\2\2\67"+
+ "\7\3\2\2\28\66\3\2\2\29;\5\36\20\2:9\3\2\2\2;>\3\2\2\2<:\3\2\2\2<=\3\2"+
+ "\2\2=D\3\2\2\2><\3\2\2\2?C\5\n\6\2@C\5\16\b\2AC\5\20\t\2B?\3\2\2\2B@\3"+
+ "\2\2\2BA\3\2\2\2CF\3\2\2\2DB\3\2\2\2DE\3\2\2\2E\t\3\2\2\2FD\3\2\2\2GK"+
+ "\5\"\22\2HJ\5\f\7\2IH\3\2\2\2JM\3\2\2\2KI\3\2\2\2KL\3\2\2\2L\13\3\2\2"+
+ "\2MK\3\2\2\2NO\5\20\t\2O\r\3\2\2\2PT\5 \21\2QT\7a\2\2RT\7b\2\2SP\3\2\2"+
+ "\2SQ\3\2\2\2SR\3\2\2\2TU\3\2\2\2UV\7\4\2\2VW\5\20\t\2W\17\3\2\2\2X]\5"+
+ "\22\n\2YZ\t\2\2\2Z\\\5\22\n\2[Y\3\2\2\2\\_\3\2\2\2][\3\2\2\2]^\3\2\2\2"+
+ "^\21\3\2\2\2_]\3\2\2\2`e\5\24\13\2ab\t\3\2\2bd\5\24\13\2ca\3\2\2\2dg\3"+
+ "\2\2\2ec\3\2\2\2ef\3\2\2\2f\23\3\2\2\2ge\3\2\2\2hq\5 \21\2iq\7a\2\2jq"+
+ "\7b\2\2kq\5\26\f\2lq\7j\2\2mq\7l\2\2nq\7k\2\2oq\5\30\r\2ph\3\2\2\2pi\3"+
+ "\2\2\2pj\3\2\2\2pk\3\2\2\2pl\3\2\2\2pm\3\2\2\2pn\3\2\2\2po\3\2\2\2q\25"+
+ "\3\2\2\2rv\7m\2\2su\7i\2\2ts\3\2\2\2ux\3\2\2\2vt\3\2\2\2vw\3\2\2\2wz\3"+
+ "\2\2\2xv\3\2\2\2y{\7\5\2\2zy\3\2\2\2z{\3\2\2\2{\27\3\2\2\2|~\7d\2\2}|"+
+ "\3\2\2\2}~\3\2\2\2~\177\3\2\2\2\177\u0080\7i\2\2\u0080\31\3\2\2\2\u0081"+
+ "\u0082\7o\2\2\u0082\33\3\2\2\2\u0083\u0084\7n\2\2\u0084\35\3\2\2\2\u0085"+
+ "\u0086\7g\2\2\u0086\37\3\2\2\2\u0087\u0088\7h\2\2\u0088!\3\2\2\2\u0089"+
+ "\u008a\t\4\2\2\u008a#\3\2\2\2\21\'*-\66'=3
+'dac'=4
+'jms'=5
+'dzm'=6
+'lac'=7
+'xor'=8
+'add'=9
+'tad'=10
+'xct'=11
+'isz'=12
+'and'=13
+'sad'=14
+'jmp'=15
+'nop'=16
+'law'=17
+'cma'=18
+'las'=19
+'ral'=20
+'rar'=21
+'hlt'=22
+'sma'=23
+'sza'=24
+'snl'=25
+'skp'=26
+'sna'=27
+'szl'=28
+'rtl'=29
+'rtr'=30
+'cil'=31
+'rcl'=32
+'rcr'=33
+'cia'=34
+'lrs'=35
+'lrss'=36
+'lls'=37
+'llss'=38
+'als'=39
+'alss'=40
+'mul'=41
+'idiv'=42
+'lacq'=43
+'clq'=44
+'omq'=45
+'cmq'=46
+'lmq'=47
+'dscs'=48
+'dslw'=49
+'dslm'=50
+'dsld'=51
+'dsls'=52
+'dssf'=53
+'dsrs'=54
+'iof'=55
+'ion'=56
+'caf'=57
+'clon'=58
+'clsf'=59
+'clof'=60
+'ksf'=61
+'krb'=62
+'tsf'=63
+'tcf'=64
+'tls'=65
+'sck'=66
+'cck'=67
+'lck'=68
+'rsf'=69
+'rsa'=70
+'rrb'=71
+'psf'=72
+'pcf'=73
+'psa'=74
+'cdf'=75
+'rlpd'=76
+'lda'=77
+'wcga'=78
+'raef'=79
+'beg'=80
+'spb'=81
+'cpb'=82
+'lpb'=83
+'wbl'=84
+'dprs'=85
+'dpsf'=86
+'dpcf'=87
+'dprc'=88
+'crsf'=89
+'crrb'=90
+'sys'=91
+'czm'=92
+'irss'=93
+'dsm'=94
+'.'=95
+'..'=96
+'+'=97
+'-'=98
+'*'=99
+'/'=100
diff --git a/pdp7parse/src/main/java/pdp7Lexer.tokens b/pdp7parse/src/main/java/pdp7Lexer.tokens
new file mode 100644
index 0000000..ff4ed2b
--- /dev/null
+++ b/pdp7parse/src/main/java/pdp7Lexer.tokens
@@ -0,0 +1,210 @@
+T__0=1
+T__1=2
+T__2=3
+T__3=4
+T__4=5
+T__5=6
+T__6=7
+T__7=8
+T__8=9
+T__9=10
+T__10=11
+T__11=12
+T__12=13
+T__13=14
+T__14=15
+T__15=16
+T__16=17
+T__17=18
+T__18=19
+T__19=20
+T__20=21
+T__21=22
+T__22=23
+T__23=24
+T__24=25
+T__25=26
+T__26=27
+T__27=28
+T__28=29
+T__29=30
+T__30=31
+T__31=32
+T__32=33
+T__33=34
+T__34=35
+T__35=36
+T__36=37
+T__37=38
+T__38=39
+T__39=40
+T__40=41
+T__41=42
+T__42=43
+T__43=44
+T__44=45
+T__45=46
+T__46=47
+T__47=48
+T__48=49
+T__49=50
+T__50=51
+T__51=52
+T__52=53
+T__53=54
+T__54=55
+T__55=56
+T__56=57
+T__57=58
+T__58=59
+T__59=60
+T__60=61
+T__61=62
+T__62=63
+T__63=64
+T__64=65
+T__65=66
+T__66=67
+T__67=68
+T__68=69
+T__69=70
+T__70=71
+T__71=72
+T__72=73
+T__73=74
+T__74=75
+T__75=76
+T__76=77
+T__77=78
+T__78=79
+T__79=80
+T__80=81
+T__81=82
+T__82=83
+T__83=84
+T__84=85
+T__85=86
+T__86=87
+T__87=88
+T__88=89
+T__89=90
+T__90=91
+T__91=92
+T__92=93
+T__93=94
+LOC=95
+RELOC=96
+PLUS=97
+MINUS=98
+TIMES=99
+DIV=100
+LABEL=101
+IDENTIFIER=102
+NUMERIC_LITERAL=103
+DECIMAL=104
+OCTAL=105
+DECIMAL_MINUS=106
+STRING=107
+COMMENT=108
+EOL=109
+WS=110
+';'=1
+'='=2
+'>'=3
+'dac'=4
+'jms'=5
+'dzm'=6
+'lac'=7
+'xor'=8
+'add'=9
+'tad'=10
+'xct'=11
+'isz'=12
+'and'=13
+'sad'=14
+'jmp'=15
+'nop'=16
+'law'=17
+'cma'=18
+'las'=19
+'ral'=20
+'rar'=21
+'hlt'=22
+'sma'=23
+'sza'=24
+'snl'=25
+'skp'=26
+'sna'=27
+'szl'=28
+'rtl'=29
+'rtr'=30
+'cil'=31
+'rcl'=32
+'rcr'=33
+'cia'=34
+'lrs'=35
+'lrss'=36
+'lls'=37
+'llss'=38
+'als'=39
+'alss'=40
+'mul'=41
+'idiv'=42
+'lacq'=43
+'clq'=44
+'omq'=45
+'cmq'=46
+'lmq'=47
+'dscs'=48
+'dslw'=49
+'dslm'=50
+'dsld'=51
+'dsls'=52
+'dssf'=53
+'dsrs'=54
+'iof'=55
+'ion'=56
+'caf'=57
+'clon'=58
+'clsf'=59
+'clof'=60
+'ksf'=61
+'krb'=62
+'tsf'=63
+'tcf'=64
+'tls'=65
+'sck'=66
+'cck'=67
+'lck'=68
+'rsf'=69
+'rsa'=70
+'rrb'=71
+'psf'=72
+'pcf'=73
+'psa'=74
+'cdf'=75
+'rlpd'=76
+'lda'=77
+'wcga'=78
+'raef'=79
+'beg'=80
+'spb'=81
+'cpb'=82
+'lpb'=83
+'wbl'=84
+'dprs'=85
+'dpsf'=86
+'dpcf'=87
+'dprc'=88
+'crsf'=89
+'crrb'=90
+'sys'=91
+'czm'=92
+'irss'=93
+'dsm'=94
+'.'=95
+'..'=96
+'+'=97
+'-'=98
+'*'=99
+'/'=100
diff --git a/pdp7parse/src/test/java/com/khubla/pdp7parse/BasicTests.java b/pdp7parse/src/test/java/com/khubla/pdp7parse/BasicTests.java
new file mode 100644
index 0000000..d04b0aa
--- /dev/null
+++ b/pdp7parse/src/test/java/com/khubla/pdp7parse/BasicTests.java
@@ -0,0 +1,35 @@
+package com.khubla.pdp7parse;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.Collection;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.khubla.pdp7parse.antlr4.pdp7Parser.ProgContext;
+
+public class BasicTests {
+ @Test
+ public void test1() {
+ String[] extensions = new String[] { "s" };
+ Collection files = FileUtils.listFiles(new File("src/test/resources"), extensions, true);
+ for (File file : files) {
+ testFile(file);
+ }
+ }
+
+ private void testFile(File file) {
+ try {
+ System.out.println(file.getAbsolutePath());
+ InputStream is = new FileInputStream(file);
+ ProgContext progContext = PDP7Parser.parse(is, System.out);
+ Assert.assertNotNull(progContext);
+ } catch (Exception e) {
+ e.printStackTrace();
+ Assert.fail();
+ }
+ }
+}
diff --git a/pdp7parse/src/test/resources/cat.s b/pdp7parse/src/test/resources/cat.s
new file mode 100644
index 0000000..f40fd6c
--- /dev/null
+++ b/pdp7parse/src/test/resources/cat.s
@@ -0,0 +1,151 @@
+" cat: cat [arg1 arg2 ...]
+
+ " Load the pointer pointer in 017777 to see if we have any arguments
+ lac 017777 i
+ sad d4 " Skip if we have more than four argument words
+ jmp nofiles " Only four argument words, so no arguments
+ lac 017777 " Move five words past the argument word count
+ tad d1 " so that AC points at the first argument
+ tad d4 " and save the pointer in name
+ dac name
+
+loop:
+ sys open; name:0; 0 " Open file, get fd back
+ spa
+ jmp badfile " Negative fd, exit with an error message
+ dac fi " Save file descriptor in fi
+
+1:
+ jms getc " Get a character in AC
+ sad o4
+ jmp 1f " Break the loop when we get a ctrl-D
+ jms putc " Write the character on stdout
+ jmp 1b " and loop back
+
+1:
+ lac fi " Close the file descriptor in fi
+ sys close
+
+loop1:
+ -4
+ tad 017777 i " Subtract 4 from the count of argument words
+ dac 017777 i
+ sad d4 " Is the value 4, i.e. no args left?
+ jmp done " Yes, so exit
+
+ lac name " Still an argument, so move up
+ tad d4 " to the next filename argument
+ dac name
+ jmp loop " and loop back to cat this file
+
+badfile:
+ lac name " Get the pointer to the filename
+ dac 1f " Store it in 1f below
+ lac d8 " Load fd 8 which is stderr
+ sys write; 1:0; 4 " Write the four words of the filename
+ lac d8
+ sys write; 1f; 2 " and then write " ?\n"
+ jmp loop1 " Now try doing the next argument
+
+1: 040;077012 " String literal: " ?\n"
+
+nofiles:
+ lac d8
+ sys write; 1f; 5 " Write "No files\n" to stderr
+ sys exit " and exit
+
+1: ; 040; ;;; 040040; 040040; 040040
+dotdot:
+ 056056; 040040; 040040; 040040
+system:
+ ;;; 040040
+scrname:
+ <*s>;;040040;040040
+pass2:
+