使用Flee时,当我尝试在表达式字符串中使用I字符时,我收到此异常消息“SyntaxError:Unexpected character:I Line:1,Column:1”。
ExpressionContext EC = new ExpressionContext();
EC.Variables.Add("I", 1);
EC.Variables.Add("b", 4);
EC.Variables.Add("p", new Point(0, 0, 0));
string exp = "I > b";
IDynamicExpression DE = EC.CompileDynamic(exp);
bool o = (bool)DE.Evaluate();
//SyntaxError: Unexpected character: I Line: 1, Column: 1
同样的事情也发生在“POINT.X> 0”上。
答案 0 :(得分:0)
" I"角色有问题,但你可以用" i"替换你的公式和变量。它有效。
.Replace("I", "i")
答案 1 :(得分:0)
我认为你的意思是" POINT.X>" 0 POINT.X是变量名称,因此flee在变量名称中具有非字母数字字符的限制,唯一接受的是下划线" _"。这可能是我们可以在flee项目上进行协作和解决的,所以你可以尝试创建一个表达式语言来删除非字母数字字符或创建一个映射替换另一个令牌:
即"。" => " ___ Dot ____"," - " => " ___短跑____"等等。
使用像Regex.Replace这样的正则表达式(变量," [^ a-bA-B0-9 _] +",nonAlphaNumeric => Mapper [nonAlphaNumeric.value])。 Mapper可以是字典或任何你决定的。