summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdela Vais <adela.vais99@gmail.com>2022-09-19 15:12:39 +0200
committerAkim Demaille <akim.demaille@gmail.com>2022-09-20 06:39:05 +0200
commitbe4528096ec05f0d58bd9ff53a293e1ec3193a85 (patch)
tree9f6ccb8cf8f463c0a324da625be76371fbaff155
parentc0258915474496874318f4767ba6ebcc1e9471f0 (diff)
downloadbison-be4528096ec05f0d58bd9ff53a293e1ec3193a85.tar.gz
d: fix interface syntax error
Fix syntax error regarding interface inheritance of the Lexer. It appeared when the `%code lexer` option was used. Reported by ledaniel2. <https://github.com/akimd/bison/issues/84> * data/skeletons/lalr1.d: Fix syntax. * tests/d.at: Test it.
-rw-r--r--data/skeletons/lalr1.d5
-rw-r--r--tests/d.at7
2 files changed, 10 insertions, 2 deletions
diff --git a/data/skeletons/lalr1.d b/data/skeletons/lalr1.d
index 3195dbf8..01175325 100644
--- a/data/skeletons/lalr1.d
+++ b/data/skeletons/lalr1.d
@@ -269,9 +269,10 @@ b4_user_union_members
}
}]])[
-]b4_lexer_if([[ private class YYLexer implements Lexer {
+]b4_lexer_if([[private class YYLexer: Lexer
+{
]b4_percent_code_get([[lexer]])[
- }
+}
]])[
/** The object doing lexical analysis for us. */
private Lexer yylexer;
diff --git a/tests/d.at b/tests/d.at
index 6be53eef..347e868c 100644
--- a/tests/d.at
+++ b/tests/d.at
@@ -112,6 +112,13 @@ AT_CHECK_D_GREP([[class YYParser : BaseClass]])
AT_CHECK_D_MINIMAL([%define api.parser.extends {Interface}], [], [], [interface Interface {}])
AT_CHECK_D_GREP([[class YYParser : Interface]])
+AT_CHECK_D_MINIMAL([%code lexer
+{
+ Symbol yylex () {return Symbol();}
+ void yyerror (string s) {import std.stdio;writeln(s);}
+}], [], [], [])
+AT_CHECK_D_GREP([[private class YYLexer: Lexer]])
+
AT_CHECK_D_MINIMAL(
[%define api.parser.extends {BaseClass}
%define api.parser.implements {Interface}], [], [],