From 0f3fa0ffee0f6c03b9eeb56ec29f35409d4ca754 Mon Sep 17 00:00:00 2001
From: "Prof. Ronald Moore" <ronald.moore@h-da.de>
Date: Thu, 30 Apr 2020 20:07:40 +0200
Subject: [PATCH] Skeleton

---
 .../cplusplus/interpreter/Makefile            |  36 +++++++++++
 .../cplusplus/interpreter/README.md           |  25 ++++++++
 .../cplusplus/interpreter/interpreter         | Bin 0 -> 17600 bytes
 .../cplusplus/interpreter/interpreter.cpp     |  60 ++++++++++++++++++
 4 files changed, 121 insertions(+)
 create mode 100644 recursiveDescentParsers/cplusplus/interpreter/Makefile
 create mode 100644 recursiveDescentParsers/cplusplus/interpreter/README.md
 create mode 100755 recursiveDescentParsers/cplusplus/interpreter/interpreter
 create mode 100644 recursiveDescentParsers/cplusplus/interpreter/interpreter.cpp

diff --git a/recursiveDescentParsers/cplusplus/interpreter/Makefile b/recursiveDescentParsers/cplusplus/interpreter/Makefile
new file mode 100644
index 0000000..fd54984
--- /dev/null
+++ b/recursiveDescentParsers/cplusplus/interpreter/Makefile
@@ -0,0 +1,36 @@
+# This Makefile made available to his students by 
+# Prof. Ronald Moore  
+#     https://fbi.h-da.de/personen/ronald-moore/  
+#     mailto:ronald.moore@h-da.de
+# with no warranties whatsoever
+
+
+PROGS := interpreter
+
+# Uncomment only one of the next two lines (choose your c++ compiler)
+# CC=g++
+CC := clang++
+
+## Add your own CFLAGS if you find them necessary... such as -O3 or so... 
+CFLAGS :=  
+
+
+## More preliminaries
+# See https://www.gnu.org/software/make/manual/html_node/Special-Targets.html
+# In this makefile, we want to keep going even if we find errors
+.IGNORE :
+
+# Tell make that the following "targets" are "phony"
+# Cf. https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html#Phony-Targets
+.PHONY : all clean
+
+##  Now, the targets -- the things that will get made!
+
+all: $(PROGS)
+
+$(PROGS): %: %.cpp
+	$(CC) -g $< $(CFLAGS) -o $@
+
+clean: 
+	$(RM) -fv *~ *.o $(PROGS)
+
diff --git a/recursiveDescentParsers/cplusplus/interpreter/README.md b/recursiveDescentParsers/cplusplus/interpreter/README.md
new file mode 100644
index 0000000..018defe
--- /dev/null
+++ b/recursiveDescentParsers/cplusplus/interpreter/README.md
@@ -0,0 +1,25 @@
+Contents
+========
+
+Everything here is taken from the slides for the "Compiler Construction"
+course, i.e. it is directly from Prof. Ronald C. Moore.
+
+Or at least, after all this time, I really don't remember having stolen
+this code from somewhere else, but if you find an older copy that looks
+similar, please let me know, so I can give credit where credit is due --
+or disavow knowledge of that source (as the case may be).
+
+You are in the following subdirectory 
+  ** `interpreter`  
+     This code take mathematical expressions and evaluates them,
+     i.e. it outputs numbers.
+     
+See **Chapter 1 Front End Construction**, Slides 21 and 22 (and please let me know when the inevitable day comes that these slide numbers are no longer correct).
+
+Ronald Moore  
+https://fbi.h-da.de/personen/ronald-moore/  
+ronald.moore@h-da.de
+ 
+
+30 April 2020 
+
diff --git a/recursiveDescentParsers/cplusplus/interpreter/interpreter b/recursiveDescentParsers/cplusplus/interpreter/interpreter
new file mode 100755
index 0000000000000000000000000000000000000000..b4110dc560d39b33753aec8ba003afa3bec6f815
GIT binary patch
literal 17600
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
Xg8C$&UEVMrf>yVIutm`{pm7-hj|}d8

literal 0
HcmV?d00001

diff --git a/recursiveDescentParsers/cplusplus/interpreter/interpreter.cpp b/recursiveDescentParsers/cplusplus/interpreter/interpreter.cpp
new file mode 100644
index 0000000..f954cb5
--- /dev/null
+++ b/recursiveDescentParsers/cplusplus/interpreter/interpreter.cpp
@@ -0,0 +1,60 @@
+// This code made available to his students by 
+// Prof. Ronald Moore  
+//     https://fbi.h-da.de/personen/ronald-moore/  
+//     mailto:ronald.moore@h-da.de
+// with no warranties whatsoever
+//
+// The grammar we are going to parse here is:
+// Grammar:
+// 	E	→ T E´
+// 	E´	→ + T E´  | - T E´ | ε
+// 	T	→ F T´
+// 	T´	→ * F T´  |  / F T´  |  ε
+// 	F	→ ( E ) | num
+// where the following are taken to be tokens:
+// left and right parenthesis, the plus and minus characters,
+// as well as asterisk and forward slash -- and numbers.
+// In the script, substraction and division are not supported,
+// but it seems like time to add them.
+//
+// Note that the recursive descent function for (e.g.) E´ 
+// is nameded "E2ndHalf"-
+
+#include <cstdio>
+#include <cstdlib>
+#include <string>
+#include <vector>
+
+// Preliminaries and Utilities
+// ============================
+
+// global variables -- sue me if you don't like that!
+std::string	currentLine( "" );
+int		currentLineNumber = 0;
+int		currentColumnNumber = 0;
+int		currentTokenLength = 0;
+// Utility Types
+typedef double numberType; // feel fee to change this to something else like int or float or bigint....
+
+// the tokens
+enum Token { 
+	tok_number,
+	tok_lparen,
+	tok_rparen,
+	tok_plus,
+	tok_minus,
+	tok_times,
+	tok_div
+} next_token; // again with the global variables... 
+
+// The Lexer
+// ==========
+
+	
+// main (!)
+// =========
+
+int main( int argc, char **argv ) {
+
+	return 0; // Alles klar!!!
+}
-- 
GitLab