diff --git a/src/main/jastadd/parser/RelAst.parser b/src/main/jastadd/parser/RelAst.parser index c4cfd43d096b226f9ee3c98fe5f75975be4f10e1..628e452c42cd935902cd79ef1293b8c46a1fb0b5 100644 --- a/src/main/jastadd/parser/RelAst.parser +++ b/src/main/jastadd/parser/RelAst.parser @@ -1,6 +1,5 @@ GrammarFile goal = comment_list.c grammar_file.f {: f.getDeclarationList().insertChild(new EmptyDeclaration(c), 0); return f; :} - | grammar_file ; GrammarFile grammar_file @@ -16,8 +15,8 @@ Declaration declaration // this method would be create by the JAstAddParser from a usage of // 'comment+' in a rule, but only for the standard list class 'List'. JastAddList comment_list - = comment.n {: return new JastAddList().add(n); :} - | comment_list.l comment.n {: return l.add(n); :} + = comment.c comment_list.l {: l.insertChild(c, 0); return l; :} + | /* epsilon */ {: return new JastAddList(); :} ; Comment comment diff --git a/src/main/jastadd/scanner/Keywords.flex b/src/main/jastadd/scanner/Keywords.flex index 76397b9efcd1c748a3a1eb69675d23dbd4042178..27524e3d2ee6768c8ec6117059967c5780be15ce 100644 --- a/src/main/jastadd/scanner/Keywords.flex +++ b/src/main/jastadd/scanner/Keywords.flex @@ -1,4 +1,4 @@ -<YYINITIAL,DECLARATION> { +<YYINITIAL,COMMENT,DECLARATION> { "abstract" { yybegin(DECLARATION); return sym(Terminals.ABSTRACT); } "rel" { yybegin(DECLARATION); return sym(Terminals.RELATION); } } diff --git a/src/main/jastadd/scanner/RulesPostamble.flex b/src/main/jastadd/scanner/RulesPostamble.flex index 5460a0b87e2002c06430aa5cc88abf0b39f30b9f..37f546ff66770d94feaa71ff8b74bd4462f190d8 100644 --- a/src/main/jastadd/scanner/RulesPostamble.flex +++ b/src/main/jastadd/scanner/RulesPostamble.flex @@ -1,7 +1,7 @@ -<YYINITIAL,DECLARATION> { +<YYINITIAL,COMMENT,DECLARATION> { {ID} { yybegin(DECLARATION); return sym(Terminals.ID); } - [^] { throw new ScannerError((yyline+1) +"," + (yycolumn+1) + ": Illegal character <"+yytext()+">"); } } -<YYINITIAL,DECLARATION,COMMENT> { +<YYINITIAL,COMMENT,DECLARATION> { <<EOF>> { return sym(Terminals.EOF); } -} + [^] { throw new ScannerError((yyline+1) +"," + (yycolumn+1) + ": Illegal character <"+yytext()+">"); } +} \ No newline at end of file diff --git a/src/main/jastadd/scanner/Symbols.flex b/src/main/jastadd/scanner/Symbols.flex index 7f05c115b570fd3681617106bb77bc25bb79d7b2..5ac1c2d1855c91514b2d18483896ae0bb5ba1d08 100644 --- a/src/main/jastadd/scanner/Symbols.flex +++ b/src/main/jastadd/scanner/Symbols.flex @@ -1,4 +1,4 @@ -<YYINITIAL,DECLARATION> { +<YYINITIAL,COMMENT,DECLARATION> { ";" { yybegin(COMMENT); return sym(Terminals.SCOL); } ":" { yybegin(DECLARATION); return sym(Terminals.COL); } "::=" { yybegin(DECLARATION); return sym(Terminals.ASSIGN); } diff --git a/src/test/resources/NoWhitespaceAfterRules/config.yaml b/src/test/resources/NoWhitespaceAfterRules/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0b4111a0c86ed8510b2a9d72b02a58319e246f7b --- /dev/null +++ b/src/test/resources/NoWhitespaceAfterRules/config.yaml @@ -0,0 +1,9 @@ +- name: "No whitespace/comment between and after rules required" + args: + - "--inputBaseDir=in" + - "--outputBaseDir=out" + - "Grammar.relast" + - "Relation.relast" + out: "out" + expected: "in" + compare: true diff --git a/src/test/resources/NoWhitespaceAfterRules/in/Grammar.relast b/src/test/resources/NoWhitespaceAfterRules/in/Grammar.relast new file mode 100644 index 0000000000000000000000000000000000000000..5ef2b62144e2711ce5bb834bd332088f57725226 --- /dev/null +++ b/src/test/resources/NoWhitespaceAfterRules/in/Grammar.relast @@ -0,0 +1,2 @@ +Person ::= <FullName> <Address> Gender;abstract Gender; +Male : Gender;Female : Gender;Diverse : Gender; \ No newline at end of file diff --git a/src/test/resources/NoWhitespaceAfterRules/in/Relation.relast b/src/test/resources/NoWhitespaceAfterRules/in/Relation.relast new file mode 100644 index 0000000000000000000000000000000000000000..3401591959fee1ffdbdf9d8e83c7c7d63b1045ce --- /dev/null +++ b/src/test/resources/NoWhitespaceAfterRules/in/Relation.relast @@ -0,0 +1 @@ +rel Person.Friend -> Person;rel Person.Child <-> Person.Parent; \ No newline at end of file