構文要素に対応するクラス(Number クラス:数値を表す)
<summary>
</summary>
internal class Number : DomainExpression
{
<summary>
</summary>
private readonly int number;
<summary>
</summary>
<param name="number_string"></param>
public Number(string number_string)
{
number = int.Parse(number_string);
}
<summary>
</summary>
<param name="number"></param>
public Number(int number)
{
this.number = number;
}
<summary>
</summary>
public static Number Zero { get { return new Number(0); } }
<summary>
</summary>
public int Number_ => number;
<summary>
</summary>
<param name="env"></param>
<returns></returns>
public Number Eval(Env<FreeMonoidUnion> env)
{
return this;
}
<summary>
</summary>
<param name="num"></param>
<returns></returns>
public static Number operator -(Number num)
{
return new Number(-num.number);
}
<summary>
</summary>
<param name="left"></param>
<param name="right"></param>
<returns></returns>
public static Number operator +(Number left, Number right)
{
return new Number(left.number + right.number);
}
<summary>
</summary>
<param name="left"></param>
<param name="right"></param>
<returns></returns>
public static Number operator -(Number left, Number right)
{
return new Number(left.number - right.number);
}
<summary>
</summary>
<param name="left"></param>
<param name="right"></param>
<returns></returns>
public static Number operator *(Number left, Number right)
{
return new Number(left.number * right.number);
}
<summary>
</summary>
<param name="left"></param>
<param name="right"></param>
<returns></returns>
public static Number operator /(Number left, Number right)
{
return new Number(left.number / right.number);
}
<summary>
</summary>
<param name="left"></param>
<param name="right"></param>
<returns></returns>
public static Number operator %(Number left, Number right)
{
return new Number(left.number % right.number);
}
<summary>
</summary>
<returns></returns>
public string Print()
{
return number.ToString();
}
<summary>
</summary>
<param name="yieldp"></param>
<param name="typep"></param>
<param name="indp"></param>
<param name="indcount"></param>
<param name="perf"></param>
<returns></returns>
public string GeneratePython(bool yieldp, bool typep, bool indp, int indcount, Func<string, string> perf)
{
if (yieldp)
{
return $"yield {number}\r\n";
}
else
{
return $"{number}";
}
}
<summary>
</summary>
<param name="yieldp"></param>
<param name="typep"></param>
<param name="indp"></param>
<param name="indcount"></param>
<param name="perf"></param>
<returns></returns>
public string GenerateCS(bool yieldp, bool typep, bool indp, int indcount, Func<string, string> perf)
{
if (yieldp)
{
return $"yield return {number};\r\n";
}
else
{
return $"{number}";
}
}
}
