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