This commit is contained in:
Tom Everett
2016-03-05 10:31:09 -07:00
parent ee2f1efb1c
commit 263dd699e6
6 changed files with 246 additions and 1 deletions
@@ -0,0 +1,54 @@
package com.khubla.pdp7parse;
/*
* Copyright 2016, Tom Everett <tom@khubla.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.ParseTreeListener;
import org.antlr.v4.runtime.tree.TerminalNode;
import com.khubla.pdp7parse.antlr4.pdp7Parser.LabelContext;
public class LabelParseTreeListener implements ParseTreeListener {
private final PDP7Metadata pdp7Metadata;
public LabelParseTreeListener(PDP7Metadata pdp7Metadata) {
this.pdp7Metadata = pdp7Metadata;
}
@Override
public void visitTerminal(TerminalNode node) {
// TODO Auto-generated method stub
}
@Override
public void visitErrorNode(ErrorNode node) {
// TODO Auto-generated method stub
}
@Override
public void enterEveryRule(ParserRuleContext ctx) {
if (ctx instanceof LabelContext) {
LabelContext labelContext = (LabelContext) ctx;
}
}
@Override
public void exitEveryRule(ParserRuleContext ctx) {
// TODO Auto-generated method stub
}
}
@@ -0,0 +1,109 @@
package com.khubla.pdp7parse;
/*
* Copyright 2016, Tom Everett <tom@khubla.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
public class Opcode {
public static int dac = 0040000;
public static int jms = 0100000;
public static int dzm = 0140000;
public static int lac = 0200000;
public static int xor = 0240000;
public static int add = 0300000;
public static int tad = 0340000;
public static int xct = 0400000;
public static int isz = 0440000;
public static int and = 0500000;
public static int sad = 0540000;
public static int jmp = 0600000;
public static int nop = 0740000;
public static int i = 020000;
public static int law = 0760000;
public static int cma = 0740001;
public static int las = 0750004;
public static int ral = 0740010;
public static int rar = 0740020;
public static int hlt = 0740040;
public static int sma = 0740100;
public static int sza = 0740200;
public static int snl = 0740400;
public static int skp = 0741000;
public static int sna = 0741200;
public static int szl = 0741400;
public static int rtl = 0742010;
public static int rtr = 0742020;
public static int cll = 0744000;
public static int rcl = 0744010;
public static int rcr = 0744020;
public static int cla = 0750000;
public static int lrs = 0640500;
public static int lrss = 0660500;
public static int lls = 0640600;
public static int llss = 0660600;
public static int als = 0640700;
public static int alss = 0660700;
public static int mul = 0653323;
public static int idiv = 0653323;
public static int lacq = 0641002;
public static int clq = 0650000;
public static int omq = 0650002;
public static int cmq = 0650004;
public static int lmq = 0652000;
public static int dscs = 0707141;
public static int dslw = 0707124;
public static int dslm = 0707142;
public static int dsld = 0707104;
public static int dsls = 0707144;
public static int dssf = 0707121;
public static int dsrs = 0707132;
public static int iof = 0700002;
public static int ion = 0700042;
public static int caf = 0703302;
public static int clon = 0700044;
public static int clsf = 0700001;
public static int clof = 0700004;
public static int ksf = 0700301;
public static int krb = 0700312;
public static int tsf = 0700401;
public static int tcf = 0700402;
public static int tls = 0700406;
public static int sck = 0704301;
public static int cck = 0704304;
public static int lck = 0704312;
public static int rsf = 0700101;
public static int rsa = 0700104;
public static int rrb = 0700112;
public static int psf = 0700201;
public static int pcf = 0700202;
public static int psa = 0700204;
public static int cdf = 0700501;
public static int lds = 0701052;
public static int lda = 0701012;
public static int wcga = 0704206;
public static int raef = 0700742;
public static int rlpd = 0700723;
public static int beg = 0700547;
public static int spb = 0704401;
public static int cpb = 0704404;
public static int lpb = 0704412;
public static int wbl = 0704424;
public static int dprs = 0704752;
public static int dpsf = 0704741;
public static int dpcf = 0704761;
public static int dprc = 0704712;
public static int crsf = 0706701;
public static int crrb = 0706712;
}
@@ -0,0 +1,24 @@
package com.khubla.pdp7parse;
import java.util.ArrayList;
import java.util.List;
/*
* Copyright 2016, Tom Everett <tom@khubla.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
public class PDP7Metadata {
public List<String> labels = new ArrayList<String>();
}
@@ -1,5 +1,21 @@
package com.khubla.pdp7parse; package com.khubla.pdp7parse;
/*
* Copyright 2016, Tom Everett <tom@khubla.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
@@ -11,6 +27,8 @@ import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options; import org.apache.commons.cli.Options;
import org.apache.commons.cli.PosixParser; import org.apache.commons.cli.PosixParser;
import com.khubla.pdp7parse.antlr4.pdp7Parser.ProgContext;
/** /**
* @author tom * @author tom
*/ */
@@ -48,7 +66,9 @@ public class PDP7Parse {
final String inputFileName = cmd.getOptionValue(INPUT_FILE_OPTION); final String inputFileName = cmd.getOptionValue(INPUT_FILE_OPTION);
final File inputFile = new File(inputFileName); final File inputFile = new File(inputFileName);
if (inputFile.exists()) { if (inputFile.exists()) {
PDP7Parser.parse(new FileInputStream(inputFile), System.out); ProgContext progContext = PDP7Parser.parse(new FileInputStream(inputFile), System.out);
PDP7Metadata pdp7Metadata = new PDP7Metadata();
PDP7Parser.analyse(progContext, pdp7Metadata);
} }
} catch (final Exception e) { } catch (final Exception e) {
e.printStackTrace(); e.printStackTrace();
@@ -1,4 +1,20 @@
package com.khubla.pdp7parse; package com.khubla.pdp7parse;
/*
* Copyright 2016, Tom Everett <tom@khubla.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
@@ -7,6 +23,7 @@ import java.io.Reader;
import org.antlr.v4.runtime.ANTLRInputStream; import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
import com.khubla.pdp7parse.antlr4.pdp7Lexer; import com.khubla.pdp7parse.antlr4.pdp7Lexer;
import com.khubla.pdp7parse.antlr4.pdp7Parser; import com.khubla.pdp7parse.antlr4.pdp7Parser;
@@ -28,4 +45,9 @@ public class PDP7Parser {
throw new Exception("Exception reading and parsing file", e); throw new Exception("Exception reading and parsing file", e);
} }
} }
public static void analyse(ProgContext progContext, PDP7Metadata pdp7Metadata) {
ParseTreeWalker parseTreeWalker = new ParseTreeWalker();
parseTreeWalker.walk(new LabelParseTreeListener(pdp7Metadata), progContext);
}
} }
@@ -1,5 +1,21 @@
package com.khubla.pdp7parse; package com.khubla.pdp7parse;
/*
* Copyright 2016, Tom Everett <tom@khubla.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.InputStream; import java.io.InputStream;