2 Commits
0.1.0 ... 0.1.1

Author SHA1 Message Date
db46e7b8d8 0.1.1 2019-12-02 07:56:59 +01:00
379583607b Tokenicer: Better identifier tokening. 2019-12-02 07:56:12 +01:00
5 changed files with 45 additions and 10 deletions

View File

@@ -171,6 +171,17 @@ namespace VAR.ExpressionEvaluator.Tests
Assert.AreEqual(50m, result);
}
[TestMethod()]
public void Variables__Var1DivideVar2()
{
EvaluationContext evaluationContex = new EvaluationContext();
evaluationContex.SetVariable("_v1", 100);
evaluationContex.SetVariable("$v2", 20);
string expression = "_v1 / $v2";
object result = Parser.EvaluateString(expression, evaluationContex);
Assert.AreEqual(5m, result);
}
#endregion Variables
#region Funcitions

View File

@@ -4,12 +4,12 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTitle("VAR.ExpressionEvaluator.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyCompany("VAR")]
[assembly: AssemblyProduct("VAR.ExpressionEvaluator.Tests")]
[assembly: AssemblyCopyright("Copyright © VAR 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("3195f0e0-9489-49ce-8fc2-627a73f80cc7")]
[assembly: AssemblyVersion("0.1.0.0")]
[assembly: AssemblyFileVersion("0.1.0.0")]
[assembly: AssemblyVersion("0.1.1.0")]
[assembly: AssemblyFileVersion("0.1.1.0")]

View File

@@ -90,9 +90,9 @@ namespace VAR.ExpressionEvaluator.Tests
}
[TestMethod()]
public void Tokenizer__Keywords()
public void Tokenizer__Identifiers()
{
var testString = "null true false";
var testString = "null true false _$variable1 $variable2";
var t = new Tokenizer(new StringReader(testString));
// "null"
@@ -110,6 +110,16 @@ namespace VAR.ExpressionEvaluator.Tests
Assert.AreEqual(t.Text, "false");
t.NextToken();
// "_$variable1"
Assert.AreEqual(t.Token, Token.Identifier);
Assert.AreEqual(t.Text, "_$variable1");
t.NextToken();
// "$variable2"
Assert.AreEqual(t.Token, Token.Identifier);
Assert.AreEqual(t.Text, "$variable2");
t.NextToken();
Assert.AreEqual(t.Token, Token.EOF);
}

View File

@@ -11,5 +11,5 @@ using System.Runtime.InteropServices;
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("74635f68-55b1-4819-84a3-9ea818d396d9")]
[assembly: AssemblyVersion("0.1.0.0")]
[assembly: AssemblyFileVersion("0.1.0.0")]
[assembly: AssemblyVersion("0.1.1.0")]
[assembly: AssemblyFileVersion("0.1.1.0")]

View File

@@ -171,10 +171,10 @@ namespace VAR.ExpressionEvaluator
}
// Identifier
if (char.IsLetter(_currentChar))
if (IsIdentifierStartLetter(_currentChar))
{
var sb = new StringBuilder();
while (char.IsLetterOrDigit(_currentChar) || _currentChar == '_')
while (IsIdentifierLetter(_currentChar))
{
sb.Append(_currentChar);
NextChar();
@@ -216,7 +216,11 @@ namespace VAR.ExpressionEvaluator
else
{
NextChar();
if (_currentChar == '\\')
if (_currentChar == stringEndsWith)
{
sbString.Append(stringEndsWith);
}
else if (_currentChar == '\\')
{
sbString.Append('\\');
}
@@ -260,5 +264,15 @@ namespace VAR.ExpressionEvaluator
throw new InvalidDataException(string.Format("Unexpected character: {0} at {1}", _currentChar, _currentPosition));
}
private static bool IsIdentifierLetter(char c)
{
return char.IsLetterOrDigit(c) || c == '_' || c == '$' || c == '#' || c == '@';
}
private static bool IsIdentifierStartLetter(char c)
{
return char.IsLetter(c) || c == '_' || c == '$' || c == '#' || c == '@';
}
}
}