开发一个股票技术指标编辑语言 的编译器,遇到一个 array (数组) 做为 if 语句 条件的情况实现不了
语法都参考 tradingview 的 Pine script
Pine script
//@version=3
study("For Loop tutorial - Example 5")
//volume = [10,20,10]
//open = [1,2,3]
//close =[2,3,1]
total_volume = volume - volume //total_volume=[0,0,0]
for i = 0 to 2
if close >= open // close >= open =[true,true,false]
continue
total_volume := total_volume + volume
plot(total_volume, style=histogram) //total_volume=[0,0,30]
我尝试了下面的实现 但是有很多不足,所以请教大神。
public class IfElseNode : Node
{
private Node exp;
private Node expX;
private Node expY;
public IfElseNode(Node expinput, Node expxinput, Node expyinput)
{
exp = expinput;
expX = expxinput;
expY = expyinput;
}
public Object eval(SymbolTable symbols)
{
SymbolTable table1 = new SymbolTable(symbols);
SymbolTable table2 = new SymbolTable(symbols);
return ((Value)exp.eval(symbols)).Iff(expX.eval(table1), expY.eval(table2));
}
}
public Value Iff(Value x, Value y)
{
if (this.type == "bool") return Convert.ToBoolean(value) ? x : y;
if (this.type == "array")
{
var convert = new ConvertMap();
var reusltList = new List<Value>();
var arrayY = convert.ConvertArray(y);
var arrayX = convert.ConvertArray(x);
for (int i = 0; i < ((List<Value>)value).Count; i++)
{
var item =((List<Value>)value)[i];
var xItem = ((List<Value>)arrayX.value)[i];
var yItem = ((List<Value>)arrayY.value)[i];
if (Convert.ToBoolean(item.value))
{
reusltList.Add(new Value(xItem.value, xItem.type));
}
else
{
reusltList.Add(new Value(yItem.value, yItem.type));
}
}
return new Value(reusltList, "array");
}
return null;
}
我的问题是 volume ,total_volume,close 和open 都是 数组,如何让 数组和数组比较大小 并作为 if 语句的条件
我已经用Antlr 把代码 编译成 抽象树 并转化 为C#对象,但无法用C#实现 以数组作为 条件的 if 语句 和 if 控制流
可以解决问题可以加分