Skip to content

Commit

Permalink
bugfix #175
Browse files Browse the repository at this point in the history
  • Loading branch information
b3b00 committed May 15, 2020
1 parent 4261aa9 commit d49827b
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 5 deletions.
2 changes: 2 additions & 0 deletions ParserTests/lexer/GenericLexerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -664,10 +664,12 @@ public void TestManyString()
var tok1 = r.Tokens[0];
Assert.Equal(ManyString.STRING, tok1.TokenID);
Assert.Equal(expectString1, tok1.Value);
Assert.Equal('"',tok1.StringDelimiter);

var tok2 = r.Tokens[1];
Assert.Equal(ManyString.STRING, tok2.TokenID);
Assert.Equal(expectString2, tok2.Value);
Assert.Equal('\'',tok2.StringDelimiter);
}

[Fact]
Expand Down
40 changes: 37 additions & 3 deletions samples/ParserExample/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,18 @@
using sly.parser.syntax.grammar;
using sly.buildresult;
using sly.parser.generator.visitor;
using Xunit;

namespace ParserExample
{

public enum ManyString
{
[Lexeme(GenericToken.String, "'", "'")]
[Lexeme(GenericToken.String)]
STRING
}

public enum TokenType
{
[Lexeme("a")] a = 1,
Expand Down Expand Up @@ -530,21 +539,46 @@ public static void TestAssociativityFactorExpressionParser()
Console.WriteLine($"{r.IsOk} : {r.Result}");
;
}

public static void TestManyString()
{
var lexerRes = LexerBuilder.BuildLexer(new BuildResult<ILexer<ManyString>>());
Assert.False(lexerRes.IsError);
var lexer = lexerRes.Result;
var string1 = "\"hello \\\"world \"";
var expectString1 = "\"hello \"world \"";
var string2 = "'that''s it'";
var expectString2 = "'that's it'";
var source1 = $"{string1} {string2}";
var r = lexer.Tokenize(source1);
Assert.True(r.IsOk);
Assert.Equal(3, r.Tokens.Count);
var tok1 = r.Tokens[0];
Assert.Equal(ManyString.STRING, tok1.TokenID);
Assert.Equal(expectString1, tok1.Value);
Assert.Equal('"',tok1.StringDelimiter);

var tok2 = r.Tokens[1];
Assert.Equal(ManyString.STRING, tok2.TokenID);
Assert.Equal(expectString2, tok2.Value);
Assert.Equal('\'',tok2.StringDelimiter);
}

private static void Main(string[] args)
{
//TestContextualParser();
//TestTokenCallBacks();
//test104();
//testJSON();
// testJSON();
//TestGrammarParser();
// TestGraphViz();

// TestGraphViz();
// TestChars();
//TestAssociativityFactorExpressionParser();
TestFactorial();
TestThreadsafeGeneric();
// TestFactorial();
//TestThreadsafeGeneric();
TestManyString();

}
}
Expand Down
5 changes: 3 additions & 2 deletions sly/lexer/GenericLexer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -574,7 +574,8 @@ public void AddStringLexem(IN token, string stringDelimiter, string escapeDelimi
match.Result.SpanValue = value;
match.StringDelimiterChar = stringDelimiterChar;
match.IsString = true;
if (stringDelimiterChar != escapeStringDelimiterChar)
{
match.Result.SpanValue = diffCharEscaper(escapeStringDelimiterChar,stringDelimiterChar, match.Result.SpanValue);
Expand Down Expand Up @@ -756,7 +757,7 @@ public Token<IN> Transcode(FSMMatch<GenericToken> match)
tok.CommentType = inTok.CommentType;
tok.Position = inTok.Position;
tok.Discarded = inTok.Discarded;
tok.StringDelimiter = StringDelimiterChar;
tok.StringDelimiter = match.StringDelimiterChar;
tok.TokenID = (IN) match.Properties[DerivedToken];
tok.IsEOS = tok.TokenID.Equals(default(IN));
return tok;
Expand Down
4 changes: 4 additions & 0 deletions sly/lexer/fsm/FSMMatch.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ public class FSMMatch<N>
{
public Dictionary<string, object> Properties { get; }

public bool IsString { get; set; }

public char StringDelimiterChar { get; set; }

public bool IsSuccess { get; }

public bool IsEOS { get; }
Expand Down

0 comments on commit d49827b

Please sign in to comment.