Skip to content

Commit 591dac7

Browse files
authored
Merge pull request #555 from b3b00/bugfix/issue554
Bugfix/issue554
2 parents 42cfb0f + aff5bd6 commit 591dac7

File tree

5 files changed

+56
-1
lines changed

5 files changed

+56
-1
lines changed

src/sly/lexer/GenericLexer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,7 @@ public void AddHexa(IN token, string prefix, BuildResult<ILexer<IN>> result)
578578
public void AddDate(IN token, DateFormat format, char separator, LexemeAttribute doubleLexeme,
579579
BuildResult<ILexer<IN>> result)
580580
{
581-
if (doubleLexeme != null)
581+
if (doubleLexeme != null && FSMBuilder.HasMark(in_double))
582582
{
583583
char decimalSeparator = (doubleLexeme.HasGenericTokenParameters)
584584
? doubleLexeme.GenericTokenParameters[0][0]

src/sly/lexer/fsm/FSMLexerBuilder.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,11 @@ public FSMLexerBuilder<N> AnyTransitionTo(string toNodeMark, TransitionPrecondit
582582
}
583583

584584
#endregion
585+
586+
public bool HasMark(string mark)
587+
{
588+
return Marks.ContainsKey(mark);
589+
}
585590
}
586591

587592

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using sly.lexer;
2+
using sly.parser.generator;
3+
4+
namespace ParserTests.dateIssue;
5+
6+
7+
[ParserRoot("root")]
8+
public class Issue554Parser
9+
{
10+
[Production("root : DOUBLE INT DATE")]
11+
public string root_DOUBLE_INT_DATE(Token<Issue554lexer> d, Token<Issue554lexer> i, Token<Issue554lexer> date)
12+
{
13+
return $"{d.Value}/{i.Value}/{date.Value}";
14+
}
15+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using NFluent;
3+
using sly.parser.generator;
4+
using Xunit;
5+
6+
namespace ParserTests.dateIssue;
7+
8+
public class Issue554Test
9+
{
10+
[Fact]
11+
public void TestDateIssue()
12+
{
13+
var builder = new ParserBuilder<Issue554lexer, string>();
14+
var instance = new Issue554Parser();
15+
16+
var buildParser = builder.BuildParser(instance, ParserType.EBNF_LL_RECURSIVE_DESCENT, null, null);
17+
Check.That(buildParser).IsOk();
18+
var result = buildParser.Result.Parse("3.14 42 1977.03.30");
19+
Check.That(result).IsOkParsing();
20+
Check.That(result.Result).IsEqualTo("3.14/42/1977.03.30");
21+
}
22+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using sly.lexer;
2+
3+
namespace ParserTests.dateIssue;
4+
5+
public enum Issue554lexer
6+
{
7+
[Date(DateFormat.YYYYMMDD, '.')]
8+
DATE,
9+
[Double]
10+
DOUBLE,
11+
[Int]
12+
INT,
13+
}

0 commit comments

Comments
 (0)