From 54af6737685fab0be452f446b70b9842aba89e42 Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Mon, 4 May 2020 22:22:30 +0200
Subject: [PATCH] split lexer into parts, move lexer and parser in
 subdirectories.

---
 build.gradle                                  | 12 +++-
 src/main/jastadd/RelAst.flex                  | 72 -------------------
 src/main/jastadd/{ => parser}/Preamble.parser |  0
 src/main/jastadd/{ => parser}/RelAst.parser   |  0
 src/main/jastadd/scanner/Header.flex          | 17 +++++
 src/main/jastadd/scanner/Keywords.flex        |  2 +
 src/main/jastadd/scanner/Macros.flex          |  5 ++
 src/main/jastadd/scanner/Preamble.flex        | 18 +++++
 src/main/jastadd/scanner/RulesPostamble.flex  |  4 ++
 src/main/jastadd/scanner/RulesPreamble.flex   |  5 ++
 src/main/jastadd/scanner/Symbols.flex         | 15 ++++
 11 files changed, 75 insertions(+), 75 deletions(-)
 delete mode 100644 src/main/jastadd/RelAst.flex
 rename src/main/jastadd/{ => parser}/Preamble.parser (100%)
 rename src/main/jastadd/{ => parser}/RelAst.parser (100%)
 create mode 100644 src/main/jastadd/scanner/Header.flex
 create mode 100644 src/main/jastadd/scanner/Keywords.flex
 create mode 100644 src/main/jastadd/scanner/Macros.flex
 create mode 100644 src/main/jastadd/scanner/Preamble.flex
 create mode 100644 src/main/jastadd/scanner/RulesPostamble.flex
 create mode 100644 src/main/jastadd/scanner/RulesPreamble.flex
 create mode 100644 src/main/jastadd/scanner/Symbols.flex

diff --git a/build.gradle b/build.gradle
index 21370e0..aff97ea 100644
--- a/build.gradle
+++ b/build.gradle
@@ -107,12 +107,18 @@ jastadd {
             }
 
             scanner {
-                include "src/main/jastadd/RelAst.flex"
+                include "src/main/jastadd/scanner/Header.flex",         [-4]
+                include "src/main/jastadd/scanner/Preamble.flex",       [-3]
+                include "src/main/jastadd/scanner/Macros.flex",         [-2]
+                include "src/main/jastadd/scanner/RulesPreamble.flex",  [-1]
+                include "src/main/jastadd/scanner/Keywords.flex",       [0]
+                include "src/main/jastadd/scanner/Symbols.flex",        [1]
+                include "src/main/jastadd/scanner/RulesPostamble.flex", [2]
             }
 
             parser {
-                include "src/main/jastadd/Preamble.parser"
-                include "src/main/jastadd/RelAst.parser"
+                include "src/main/jastadd/parser/Preamble.parser"
+                include "src/main/jastadd/parser/RelAst.parser"
             }
         }
     }
diff --git a/src/main/jastadd/RelAst.flex b/src/main/jastadd/RelAst.flex
deleted file mode 100644
index f9595e9..0000000
--- a/src/main/jastadd/RelAst.flex
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.jastadd.relast.scanner;
-
-import org.jastadd.relast.parser.RelAstParser.Terminals;
-
-%%
-
-%public
-%final
-%class RelAstScanner
-%extends beaver.Scanner
-
-%type beaver.Symbol
-%function nextToken
-%yylexthrow beaver.Scanner.Exception
-%scanerror RelAstScanner.ScannerError
-
-%line
-%column
-%{
-  private StringBuilder stringLitSb = new StringBuilder();
-
-  private beaver.Symbol sym(short id) {
-    return new beaver.Symbol(id, yyline + 1, yycolumn + 1, yylength(), yytext());
-  }
-
-  private beaver.Symbol sym(short id, String text) {
-    return new beaver.Symbol(id, yyline + 1, yycolumn + 1, yylength(), text);
-  }
-
-
-  public static class ScannerError extends Error {
-    public ScannerError(String message) {
-      super(message);
-    }
-  }
-%}
-
-WhiteSpace = [ ] | \t | \f | \n | \r | \r\n
-TraditionalComment   = [/][*][^*]*[*]+([^*/][^*]*[*]+)*[/]
-EndOfLineComment = "//" [^\n\r]*
-Comment = {TraditionalComment} | {EndOfLineComment}
-
-ID = [a-zA-Z$_][a-zA-Z0-9$_]*
-
-%%
-{WhiteSpace} { /* ignore */ }
-{Comment}    { return sym(Terminals.COMMENT); }
-
-"abstract"   { return sym(Terminals.ABSTRACT); }
-"rel"        { return sym(Terminals.RELATION); }
-
-";"          { return sym(Terminals.SCOL); }
-":"          { return sym(Terminals.COL); }
-"::="        { return sym(Terminals.ASSIGN); }
-"*"          { return sym(Terminals.STAR); }
-"."          { return sym(Terminals.DOT); }
-","          { return sym(Terminals.COMMA); }
-"<"          { return sym(Terminals.LT); }
-">"          { return sym(Terminals.GT); }
-"["          { return sym(Terminals.LBRACKET); }
-"]"          { return sym(Terminals.RBRACKET); }
-"/"          { return sym(Terminals.SLASH); }
-"?"          { return sym(Terminals.QUESTION_MARK); }
-"->"         { return sym(Terminals.RIGHT); }
-"<-"         { return sym(Terminals.LEFT); }
-"<->"        { return sym(Terminals.BIDIRECTIONAL); }
-
-// ID
-{ID}         { return sym(Terminals.ID); }
-<<EOF>>      { return sym(Terminals.EOF); }
-
-[^]            { throw new ScannerError((yyline+1) +"," + (yycolumn+1) + ": Illegal character <"+yytext()+">"); }
diff --git a/src/main/jastadd/Preamble.parser b/src/main/jastadd/parser/Preamble.parser
similarity index 100%
rename from src/main/jastadd/Preamble.parser
rename to src/main/jastadd/parser/Preamble.parser
diff --git a/src/main/jastadd/RelAst.parser b/src/main/jastadd/parser/RelAst.parser
similarity index 100%
rename from src/main/jastadd/RelAst.parser
rename to src/main/jastadd/parser/RelAst.parser
diff --git a/src/main/jastadd/scanner/Header.flex b/src/main/jastadd/scanner/Header.flex
new file mode 100644
index 0000000..7312065
--- /dev/null
+++ b/src/main/jastadd/scanner/Header.flex
@@ -0,0 +1,17 @@
+package org.jastadd.relast.scanner;
+
+import org.jastadd.relast.parser.RelAstParser.Terminals;
+%%
+
+%public
+%final
+%class RelAstScanner
+%extends beaver.Scanner
+
+%type beaver.Symbol
+%function nextToken
+%yylexthrow beaver.Scanner.Exception
+%scanerror RelAstScanner.ScannerError
+
+%line
+%column
diff --git a/src/main/jastadd/scanner/Keywords.flex b/src/main/jastadd/scanner/Keywords.flex
new file mode 100644
index 0000000..76e6359
--- /dev/null
+++ b/src/main/jastadd/scanner/Keywords.flex
@@ -0,0 +1,2 @@
+"abstract"   { return sym(Terminals.ABSTRACT); }
+"rel"        { return sym(Terminals.RELATION); }
diff --git a/src/main/jastadd/scanner/Macros.flex b/src/main/jastadd/scanner/Macros.flex
new file mode 100644
index 0000000..167f51b
--- /dev/null
+++ b/src/main/jastadd/scanner/Macros.flex
@@ -0,0 +1,5 @@
+WhiteSpace = [ ] | \t | \f | \n | \r | \r\n
+ID = [a-zA-Z$_][a-zA-Z0-9$_]*
+TraditionalComment   = [/][*][^*]*[*]+([^*/][^*]*[*]+)*[/]
+EndOfLineComment = "//" [^\n\r]*
+Comment = {TraditionalComment} | {EndOfLineComment}
diff --git a/src/main/jastadd/scanner/Preamble.flex b/src/main/jastadd/scanner/Preamble.flex
new file mode 100644
index 0000000..03847ad
--- /dev/null
+++ b/src/main/jastadd/scanner/Preamble.flex
@@ -0,0 +1,18 @@
+%{
+  private StringBuilder stringLitSb = new StringBuilder();
+
+  private beaver.Symbol sym(short id) {
+    return new beaver.Symbol(id, yyline + 1, yycolumn + 1, yylength(), yytext());
+  }
+
+  private beaver.Symbol sym(short id, String text) {
+    return new beaver.Symbol(id, yyline + 1, yycolumn + 1, yylength(), text);
+  }
+
+
+  public static class ScannerError extends Error {
+    public ScannerError(String message) {
+      super(message);
+    }
+  }
+%}
diff --git a/src/main/jastadd/scanner/RulesPostamble.flex b/src/main/jastadd/scanner/RulesPostamble.flex
new file mode 100644
index 0000000..1ae39c6
--- /dev/null
+++ b/src/main/jastadd/scanner/RulesPostamble.flex
@@ -0,0 +1,4 @@
+{ID}         { return sym(Terminals.ID); }
+<<EOF>>      { return sym(Terminals.EOF); }
+
+[^]            { throw new ScannerError((yyline+1) +"," + (yycolumn+1) + ": Illegal character <"+yytext()+">"); }
diff --git a/src/main/jastadd/scanner/RulesPreamble.flex b/src/main/jastadd/scanner/RulesPreamble.flex
new file mode 100644
index 0000000..a55876d
--- /dev/null
+++ b/src/main/jastadd/scanner/RulesPreamble.flex
@@ -0,0 +1,5 @@
+
+%%
+
+{WhiteSpace} { /* ignore */ }
+{Comment}    { return sym(Terminals.COMMENT); }
diff --git a/src/main/jastadd/scanner/Symbols.flex b/src/main/jastadd/scanner/Symbols.flex
new file mode 100644
index 0000000..2990e99
--- /dev/null
+++ b/src/main/jastadd/scanner/Symbols.flex
@@ -0,0 +1,15 @@
+";"          { return sym(Terminals.SCOL); }
+":"          { return sym(Terminals.COL); }
+"::="        { return sym(Terminals.ASSIGN); }
+"*"          { return sym(Terminals.STAR); }
+"."          { return sym(Terminals.DOT); }
+","          { return sym(Terminals.COMMA); }
+"<"          { return sym(Terminals.LT); }
+">"          { return sym(Terminals.GT); }
+"["          { return sym(Terminals.LBRACKET); }
+"]"          { return sym(Terminals.RBRACKET); }
+"/"          { return sym(Terminals.SLASH); }
+"?"          { return sym(Terminals.QUESTION_MARK); }
+"->"         { return sym(Terminals.RIGHT); }
+"<-"         { return sym(Terminals.LEFT); }
+"<->"        { return sym(Terminals.BIDIRECTIONAL); }
-- 
GitLab