From 85e2726ddedd2981425c5ac07f7257bce1a6ddbf Mon Sep 17 00:00:00 2001
From: jwansek <eddie.atten.ea29@gmail.com>
Date: Mon, 1 Nov 2021 14:51:47 +0000
Subject: started work on translation to c

---
 code/FORTRAN2C/Makefile                            |  8 +++++
 code/FORTRAN2C/build/out.c                         |  6 ++++
 code/FORTRAN2C/examples/maths.txt                  |  1 +
 code/FORTRAN2C/examples/maths2.txt                 |  1 +
 code/FORTRAN2C/examples/maths3.txt                 |  1 +
 code/FORTRAN2C/examples/maths4.txt                 |  1 +
 code/FORTRAN2C/fortran2c.grammar                   | 35 ++++++++++++++++++++++
 code/FORTRAN2C/fortran2c/CWriter.java              | 26 ++++++++++++++++
 code/FORTRAN2C/fortran2c/Compiler.java             | 28 +++++++++++++++++
 code/FORTRAN2C/fortran2c/Translation.java          | 13 ++++++++
 .../sableCCCalculator.grammar                      | 35 ----------------------
 .../sableCCCalculator/Translation.java             |  1 -
 12 files changed, 120 insertions(+), 36 deletions(-)
 create mode 100644 code/FORTRAN2C/Makefile
 create mode 100644 code/FORTRAN2C/build/out.c
 create mode 100644 code/FORTRAN2C/examples/maths.txt
 create mode 100644 code/FORTRAN2C/examples/maths2.txt
 create mode 100644 code/FORTRAN2C/examples/maths3.txt
 create mode 100644 code/FORTRAN2C/examples/maths4.txt
 create mode 100644 code/FORTRAN2C/fortran2c.grammar
 create mode 100644 code/FORTRAN2C/fortran2c/CWriter.java
 create mode 100644 code/FORTRAN2C/fortran2c/Compiler.java
 create mode 100644 code/FORTRAN2C/fortran2c/Translation.java
 delete mode 100644 code/simpleSableCCCalulator/sableCCCalculator.grammar

(limited to 'code')

diff --git a/code/FORTRAN2C/Makefile b/code/FORTRAN2C/Makefile
new file mode 100644
index 0000000..87610cf
--- /dev/null
+++ b/code/FORTRAN2C/Makefile
@@ -0,0 +1,8 @@
+all: 
+	java -jar ../../../sablecc-3.7/lib/sablecc.jar fortran2c.grammar
+	
+clean:
+	rm -rfv fortran2c/analysis/
+	rm -rfv fortran2c/lexer/
+	rm -rfv fortran2c/node/
+	rm -rvf fortran2c/parser/
diff --git a/code/FORTRAN2C/build/out.c b/code/FORTRAN2C/build/out.c
new file mode 100644
index 0000000..47d2d58
--- /dev/null
+++ b/code/FORTRAN2C/build/out.c
@@ -0,0 +1,6 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char** argv) {
+
+}
\ No newline at end of file
diff --git a/code/FORTRAN2C/examples/maths.txt b/code/FORTRAN2C/examples/maths.txt
new file mode 100644
index 0000000..36726f5
--- /dev/null
+++ b/code/FORTRAN2C/examples/maths.txt
@@ -0,0 +1 @@
+(36/2 + 45.2) * 3
\ No newline at end of file
diff --git a/code/FORTRAN2C/examples/maths2.txt b/code/FORTRAN2C/examples/maths2.txt
new file mode 100644
index 0000000..313296b
--- /dev/null
+++ b/code/FORTRAN2C/examples/maths2.txt
@@ -0,0 +1 @@
+sin(45 * 2) / 3
diff --git a/code/FORTRAN2C/examples/maths3.txt b/code/FORTRAN2C/examples/maths3.txt
new file mode 100644
index 0000000..e092af1
--- /dev/null
+++ b/code/FORTRAN2C/examples/maths3.txt
@@ -0,0 +1 @@
+3-1+2
\ No newline at end of file
diff --git a/code/FORTRAN2C/examples/maths4.txt b/code/FORTRAN2C/examples/maths4.txt
new file mode 100644
index 0000000..a922b77
--- /dev/null
+++ b/code/FORTRAN2C/examples/maths4.txt
@@ -0,0 +1 @@
+2 + 2
diff --git a/code/FORTRAN2C/fortran2c.grammar b/code/FORTRAN2C/fortran2c.grammar
new file mode 100644
index 0000000..80bf2b7
--- /dev/null
+++ b/code/FORTRAN2C/fortran2c.grammar
@@ -0,0 +1,35 @@
+Package fortran2c;
+Helpers
+    digit = ['0' .. '9'];
+Tokens
+    number = digit+;
+    double = ((digit)+ '.' (digit)*) | ((digit)* '.' (digit)+);
+    plus = '+';
+    minus = '-';
+    mult = '*';
+    div = '/';
+    mod = '%';
+    l_par = '(';
+    r_par = ')';
+    sin = 'sin';
+    blank = (' ' | 13 | 10)+;
+Ignored Tokens
+    blank;
+Productions
+    expr =
+        {factor} factor |
+        {plus} expr plus factor |
+        {minus} expr minus factor 
+        ;
+    factor =
+        {term} term |
+        {mult} factor mult term |
+        {div} factor div term |
+        {mod} factor mod term
+        ;
+    term =
+        {number} number |
+        {double} double |
+        {expr} l_par expr r_par |
+        {sine} sin l_par expr r_par
+        ;
\ No newline at end of file
diff --git a/code/FORTRAN2C/fortran2c/CWriter.java b/code/FORTRAN2C/fortran2c/CWriter.java
new file mode 100644
index 0000000..fec748a
--- /dev/null
+++ b/code/FORTRAN2C/fortran2c/CWriter.java
@@ -0,0 +1,26 @@
+package fortran2c;
+
+import java.io.*;
+import java.util.HashSet;
+
+public class CWriter {
+    
+    private String filePath;
+    private File theFile;
+    private FileWriter theFileWriter;
+    private HashSet<String> functions;
+
+    public CWriter(String filePath) throws IOException {
+        this.filePath = filePath;
+        File theFile = new File(filePath);
+
+        if (theFile.createNewFile()) {
+            FileWriter theFileWriter = new FileWriter(filePath);
+            theFileWriter.write("#include <stdio.h>\n#include <stdlib.h>\n\nint main(int argc, char** argv) {\n}");
+            theFileWriter.close();
+            functions.add("main");
+        } else {
+            throw new IOException("The file already exists");
+        }
+    }
+}
diff --git a/code/FORTRAN2C/fortran2c/Compiler.java b/code/FORTRAN2C/fortran2c/Compiler.java
new file mode 100644
index 0000000..7b124fa
--- /dev/null
+++ b/code/FORTRAN2C/fortran2c/Compiler.java
@@ -0,0 +1,28 @@
+package fortran2c;
+import fortran2c.parser.*;
+import fortran2c.lexer.*;
+import fortran2c.node.*;
+import java.io.*;
+
+public class Compiler
+{
+    public static void main(String[] args)
+    {
+        try
+        {
+            System.out.println("Using source file: " + args[0]);
+            // Create a Parser instance.
+            Parser p = new Parser(new Lexer(new PushbackReader(new InputStreamReader(new FileInputStream(args[0])), 1024)));
+            // Parse the input.
+            Start tree = p.parse();
+            // Apply the translation.
+            CWriter cWriter = new CWriter("build/out.c");
+
+            tree.apply(new Translation(cWriter));
+        }
+        catch(Exception e)
+        {
+            System.out.println(e.getMessage());
+        }
+    }
+}
\ No newline at end of file
diff --git a/code/FORTRAN2C/fortran2c/Translation.java b/code/FORTRAN2C/fortran2c/Translation.java
new file mode 100644
index 0000000..f5eeaba
--- /dev/null
+++ b/code/FORTRAN2C/fortran2c/Translation.java
@@ -0,0 +1,13 @@
+package fortran2c;
+import fortran2c.analysis.*;
+import fortran2c.node.*;
+
+class Translation extends DepthFirstAdapter
+{
+
+    private CWriter writer;
+
+    public Translation(CWriter writer) {
+        this.writer = writer;
+    }
+}
diff --git a/code/simpleSableCCCalulator/sableCCCalculator.grammar b/code/simpleSableCCCalulator/sableCCCalculator.grammar
deleted file mode 100644
index 426fac1..0000000
--- a/code/simpleSableCCCalulator/sableCCCalculator.grammar
+++ /dev/null
@@ -1,35 +0,0 @@
-Package sableCCCalculator;
-Helpers
-    digit = ['0' .. '9'];
-Tokens
-    number = digit+;
-    double = ((digit)+ '.' (digit)*) | ((digit)* '.' (digit)+);
-    plus = '+';
-    minus = '-';
-    mult = '*';
-    div = '/';
-    mod = '%';
-    l_par = '(';
-    r_par = ')';
-    sin = 'sin';
-    blank = (' ' | 13 | 10)+;
-Ignored Tokens
-    blank;
-Productions
-    expr =
-        {factor} factor |
-        {plus} expr plus factor |
-        {minus} expr minus factor 
-        ;
-    factor =
-        {term} term |
-        {mult} factor mult term |
-        {div} factor div term |
-        {mod} factor mod term
-        ;
-    term =
-        {number} number |
-        {double} double |
-        {expr} l_par expr r_par |
-        {sine} sin l_par expr r_par
-        ;
\ No newline at end of file
diff --git a/code/simpleSableCCCalulator/sableCCCalculator/Translation.java b/code/simpleSableCCCalulator/sableCCCalculator/Translation.java
index 737ecbd..43041c4 100644
--- a/code/simpleSableCCCalulator/sableCCCalculator/Translation.java
+++ b/code/simpleSableCCCalulator/sableCCCalculator/Translation.java
@@ -1,5 +1,4 @@
 package sableCCCalculator;
-import sableCCCalculator.SymbolTable.SymbolTableIndex;
 import sableCCCalculator.analysis.*;
 import sableCCCalculator.types.*;
 import sableCCCalculator.node.*;
-- 
cgit v1.2.3