Skip to content

Commit 6d12ff4

Browse files
committed
fix pops #487 (v 3.5.3)
1 parent 0b8f145 commit 6d12ff4

File tree

5 files changed

+107
-7
lines changed

5 files changed

+107
-7
lines changed

src/sly/lexer/GenericLexer.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1223,10 +1223,14 @@ public Token<IN> Transcode(FSMMatch<GenericToken> match)
12231223
var tok = new Token<IN>();
12241224
var inTok = match.Result;
12251225
var newMode = match.NewPosition.Mode;
1226+
var newPush = match.NewPosition.IsPush;
1227+
var newPop = match.NewPosition.IsPop;
12261228
if (inTok != null
12271229
&& derivedTokens.TryGetValue(inTok.TokenID, out var derivations)
12281230
&& derivations.TryGetValue(inTok.Value, out var derivation))
12291231
{
1232+
newPop = derivation.isPop;
1233+
newPush = derivation.isPush;
12301234
newMode = derivation.mode;
12311235
}
12321236

@@ -1235,8 +1239,8 @@ public Token<IN> Transcode(FSMMatch<GenericToken> match)
12351239
tok.SpanValue = inTok.SpanValue;
12361240
tok.CommentType = inTok.CommentType;
12371241
tok.Position = inTok.Position;
1238-
tok.Position.IsPop = match.NewPosition.IsPop;
1239-
tok.Position.IsPush = match.NewPosition.IsPush;
1242+
tok.Position.IsPop = newPop;
1243+
tok.Position.IsPush = newPush;
12401244
tok.Position.Mode = newMode;
12411245
tok.Discarded = inTok.Discarded;
12421246
tok.StringDelimiter = match.StringDelimiterChar;

src/sly/sly.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
77
<Description>#LY is a parser generator halfway between parser combinators and parser generator like ANTLR</Description>
88
<Authors>b3b00</Authors>
9-
<version>3.3.2</version>
9+
<version>3.3.3</version>
1010
<PackageProjectUrl>https://github.com/b3b00/sly</PackageProjectUrl>
1111
<RepositoryUrl>https://github.com/b3b00/sly</RepositoryUrl>
12-
<PackageVersion>3.3.2</PackageVersion>
12+
<PackageVersion>3.3.3</PackageVersion>
1313
<ApplicationIcon/>
1414
<OutputType>Library</OutputType>
1515
<StartupObject/>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"version": 1,
3+
"isRoot": true,
4+
"tools": {}
5+
}

tests/ParserTests/lexer/GenericLexerTests.cs

Lines changed: 87 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4-
using expressionparser;
5-
using expressionparser.model;
64
using GenericLexerWithCallbacks;
75
using indented;
86
using NFluent;
97
using simpleExpressionParser;
108
using sly.buildresult;
11-
using sly.i18n;
129
using sly.lexer;
1310
using sly.parser;
1411
using sly.parser.generator;
@@ -289,6 +286,33 @@ public enum Issue177Regex
289286
}
290287

291288

289+
[Lexer]
290+
public enum ManyKeywordModes
291+
{
292+
[Mode("M1","M2","default")]
293+
[AlphaNumId] ID,
294+
295+
[Push("M1")]
296+
[Mode("M1","M2","default")]
297+
[Keyword("M1")] M1,
298+
299+
[Push("M2")]
300+
[Mode("M1","M2","default")]
301+
[Keyword("M2")] M2,
302+
303+
[Pop]
304+
[Mode("M1","M2","default")]
305+
[Keyword("POP")] POP,
306+
307+
[Mode("M1")] [Sugar("$")] DOLLAR,
308+
[Mode("M1")] [Sugar("€")] EURO,
309+
310+
[Mode("M2")] [Sugar("-")] DASH,
311+
[Mode("M2")] [Sugar("_")] UNDERSCORE
312+
313+
}
314+
315+
292316

293317
public class GenericLexerTests
294318
{
@@ -1338,6 +1362,66 @@ public void TestI18nDuplicateLabel()
13381362
Check.That(error.Message).Contains("left paranthesis").And.Contains("paranthèse ouvrante");
13391363
}
13401364

1365+
[Fact]
1366+
public void TestManyKeywordModes()
1367+
{
1368+
var lexerRes = LexerBuilder.BuildLexer(new BuildResult<ILexer<ManyKeywordModes>>());
1369+
Check.That(lexerRes).IsOk();
1370+
string source = "M1$$€€M2_-_-_";
1371+
var lexer = lexerRes.Result;
1372+
var lexed = lexer.Tokenize(source);
1373+
Check.That(lexed).IsOkLexing();
1374+
var tokens = lexed.Tokens;
1375+
Check.That(tokens.MainTokens()).CountIs(12);
1376+
Check.That(tokens.SkipLast(1).Extracting(x => x.TokenID).ToList()).IsEqualTo(
1377+
new List<ManyKeywordModes>()
1378+
{
1379+
ManyKeywordModes.M1,
1380+
ManyKeywordModes.DOLLAR,
1381+
ManyKeywordModes.DOLLAR,
1382+
ManyKeywordModes.EURO,
1383+
ManyKeywordModes.EURO,
1384+
ManyKeywordModes.M2,
1385+
ManyKeywordModes.UNDERSCORE,
1386+
ManyKeywordModes.DASH,
1387+
ManyKeywordModes.UNDERSCORE,
1388+
ManyKeywordModes.DASH,
1389+
ManyKeywordModes.UNDERSCORE
1390+
});
1391+
}
1392+
[Fact]
1393+
public void TestManyKeywordModesNested()
1394+
{
1395+
var lexerRes = LexerBuilder.BuildLexer(new BuildResult<ILexer<ManyKeywordModes>>());
1396+
Check.That(lexerRes).IsOk();
1397+
string source = "M1$$€€M2_-_-_POP$$$M2_";
1398+
var lexer = lexerRes.Result;
1399+
var lexed = lexer.Tokenize(source);
1400+
Check.That(lexed).IsOkLexing();
1401+
var tokens = lexed.Tokens.MainTokens();
1402+
Check.That(tokens).CountIs(18);
1403+
Check.That(tokens.SkipLast(1).Extracting(x => x.TokenID).ToList()).IsEqualTo(
1404+
new List<ManyKeywordModes>()
1405+
{
1406+
ManyKeywordModes.M1,
1407+
ManyKeywordModes.DOLLAR,
1408+
ManyKeywordModes.DOLLAR,
1409+
ManyKeywordModes.EURO,
1410+
ManyKeywordModes.EURO,
1411+
ManyKeywordModes.M2,
1412+
ManyKeywordModes.UNDERSCORE,
1413+
ManyKeywordModes.DASH,
1414+
ManyKeywordModes.UNDERSCORE,
1415+
ManyKeywordModes.DASH,
1416+
ManyKeywordModes.UNDERSCORE,
1417+
ManyKeywordModes.POP,
1418+
ManyKeywordModes.DOLLAR,
1419+
ManyKeywordModes.DOLLAR,
1420+
ManyKeywordModes.DOLLAR,
1421+
ManyKeywordModes.M2,
1422+
ManyKeywordModes.UNDERSCORE
1423+
});
1424+
}
13411425

13421426
}
13431427
}

tests/ParserTests/stryker-config.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"stryker-config": {
3+
"reporters": ["progress", "html"],
4+
"project":"C:/Users/olduh/dev/csly/src/sly/sly.csproj"
5+
6+
}
7+
}

0 commit comments

Comments
 (0)