From 4b52746829353236fd2f5263e0746d5728b47df2 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Mon, 4 May 2020 22:23:44 +0200 Subject: [PATCH] reuse lexer from relast preprocessor, move lexer and parser into subdirectories --- build.gradle | 18 +++- src/main/jastadd/Ros2Rag.flex | 84 ------------------- src/main/jastadd/{ => parser}/Preamble.parser | 0 src/main/jastadd/{ => parser}/Ros2Rag.parser | 0 src/main/jastadd/scanner/Header.flex | 17 ++++ src/main/jastadd/scanner/Keywords.flex | 8 ++ src/main/jastadd/scanner/Macros.flex | 1 + src/main/jastadd/scanner/MappingContent.flex | 1 + 8 files changed, 41 insertions(+), 88 deletions(-) delete mode 100644 src/main/jastadd/Ros2Rag.flex rename src/main/jastadd/{ => parser}/Preamble.parser (100%) rename src/main/jastadd/{ => parser}/Ros2Rag.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/MappingContent.flex diff --git a/build.gradle b/build.gradle index dcf62a1..9c211eb 100644 --- a/build.gradle +++ b/build.gradle @@ -114,14 +114,24 @@ jastadd { } scanner { - include "src/main/jastadd/Ros2Rag.flex" + basedir ".." + include "ros2rag.base/src/main/jastadd/scanner/Header.flex", [-5] + include "relast.preprocessor/src/main/jastadd/scanner/Preamble.flex", [-4] + include "relast.preprocessor/src/main/jastadd/scanner/Macros.flex", [-3] + include "ros2rag.base/src/main/jastadd/scanner/Macros.flex", [-3] + include "relast.preprocessor/src/main/jastadd/scanner/RulesPreamble.flex", [-2] + include "ros2rag.base/src/main/jastadd/scanner/MappingContent.flex", [-1] + include "ros2rag.base/src/main/jastadd/scanner/Keywords.flex" + include "relast.preprocessor/src/main/jastadd/scanner/Keywords.flex" + include "relast.preprocessor/src/main/jastadd/scanner/Symbols.flex", [1] + include "relast.preprocessor/src/main/jastadd/scanner/RulesPostamble.flex", [2] } parser { basedir ".." - include "ros2rag.base/src/main/jastadd/Preamble.parser" - include "relast.preprocessor/src/main/jastadd/RelAst.parser" - include "ros2rag.base/src/main/jastadd/Ros2Rag.parser" + include "ros2rag.base/src/main/jastadd/parser/Preamble.parser" + include "ros2rag.base/src/main/jastadd/parser/Ros2Rag.parser" + include "relast.preprocessor/src/main/jastadd/parser/RelAst.parser" } } } diff --git a/src/main/jastadd/Ros2Rag.flex b/src/main/jastadd/Ros2Rag.flex deleted file mode 100644 index 1c0d48d..0000000 --- a/src/main/jastadd/Ros2Rag.flex +++ /dev/null @@ -1,84 +0,0 @@ -package org.jastadd.ros2rag.scanner; - -import org.jastadd.ros2rag.parser.Ros2RagParser.Terminals; - -%% - -%public -%final -%class Ros2RagScanner -%extends beaver.Scanner - -%type beaver.Symbol -%function nextToken -%yylexthrow beaver.Scanner.Exception -%scanerror Ros2RagScanner.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} - -MappingContent = [{][:][^:]*[:]+([^:}][^:]*[:]+)*[}] - -ID = [a-zA-Z$_][a-zA-Z0-9$_]* - -%% -{WhiteSpace} { /* ignore */ } -{Comment} { return sym(Terminals.COMMENT); } -{MappingContent} { return sym(Terminals.MAPPING_CONTENT); } - -"abstract" { return sym(Terminals.ABSTRACT); } -"rel" { return sym(Terminals.RELATION); } - -"read" { return sym(Terminals.READ); } -"write" { return sym(Terminals.WRITE); } -"using" { return sym(Terminals.USING); } -"canDependOn" { return sym(Terminals.CAN_DEPEND_ON); } -"maps" { return sym(Terminals.MAPS); } -"to" { return sym(Terminals.TO); } -"as" { return sym(Terminals.AS); } -"with" { return sym(Terminals.WITH); } - -";" { 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/Ros2Rag.parser b/src/main/jastadd/parser/Ros2Rag.parser similarity index 100% rename from src/main/jastadd/Ros2Rag.parser rename to src/main/jastadd/parser/Ros2Rag.parser diff --git a/src/main/jastadd/scanner/Header.flex b/src/main/jastadd/scanner/Header.flex new file mode 100644 index 0000000..974aa01 --- /dev/null +++ b/src/main/jastadd/scanner/Header.flex @@ -0,0 +1,17 @@ +package org.jastadd.ros2rag.scanner; + +import org.jastadd.ros2rag.parser.Ros2RagParser.Terminals; +%% + +%public +%final +%class Ros2RagScanner +%extends beaver.Scanner + +%type beaver.Symbol +%function nextToken +%yylexthrow beaver.Scanner.Exception +%scanerror Ros2RagScanner.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..a570b82 --- /dev/null +++ b/src/main/jastadd/scanner/Keywords.flex @@ -0,0 +1,8 @@ +"read" { return sym(Terminals.READ); } +"write" { return sym(Terminals.WRITE); } +"using" { return sym(Terminals.USING); } +"canDependOn" { return sym(Terminals.CAN_DEPEND_ON); } +"maps" { return sym(Terminals.MAPS); } +"to" { return sym(Terminals.TO); } +"as" { return sym(Terminals.AS); } +"with" { return sym(Terminals.WITH); } diff --git a/src/main/jastadd/scanner/Macros.flex b/src/main/jastadd/scanner/Macros.flex new file mode 100644 index 0000000..08bb629 --- /dev/null +++ b/src/main/jastadd/scanner/Macros.flex @@ -0,0 +1 @@ +MappingContent = [{][:][^:]*[:]+([^:}][^:]*[:]+)*[}] diff --git a/src/main/jastadd/scanner/MappingContent.flex b/src/main/jastadd/scanner/MappingContent.flex new file mode 100644 index 0000000..fdf3f20 --- /dev/null +++ b/src/main/jastadd/scanner/MappingContent.flex @@ -0,0 +1 @@ +{MappingContent} { return sym(Terminals.MAPPING_CONTENT); } -- GitLab