mirror of
https://github.com/wagesj45/cs-mic.git
synced 2025-06-30 20:40:27 -05:00
Check in
This commit is contained in:
parent
5066257912
commit
eb3bbcb69e
6 changed files with 134 additions and 21 deletions
|
@ -9,7 +9,22 @@ namespace csmic
|
||||||
{
|
{
|
||||||
public class FunctionValue
|
public class FunctionValue
|
||||||
{
|
{
|
||||||
public required csmic.ValueType Type { get; set; }
|
public ValueType Type { get; set; }
|
||||||
public object? Value { get; set; }
|
public object? Value { get; set; }
|
||||||
|
|
||||||
|
public static readonly FunctionValue TRUE = new FunctionValue(ValueType.Numeric, 1);
|
||||||
|
public static readonly FunctionValue FALSE = new FunctionValue(ValueType.Numeric, 0);
|
||||||
|
|
||||||
|
public FunctionValue()
|
||||||
|
{
|
||||||
|
this.Type = ValueType.None;
|
||||||
|
this.Value = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FunctionValue(ValueType type, object? value)
|
||||||
|
{
|
||||||
|
this.Type = type;
|
||||||
|
this.Value = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ namespace csmic
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
IEnumerable<FunctionArgument> ExpectedArguments { get; }
|
IEnumerable<FunctionArgument> ExpectedArguments { get; }
|
||||||
|
FunctionValue ReturnValue { get; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,69 @@
|
||||||
namespace csmic
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
namespace csmic
|
||||||
{
|
{
|
||||||
public class InputInterpreter
|
public class InputInterpreter
|
||||||
{
|
{
|
||||||
|
#region Members
|
||||||
|
|
||||||
|
private decimal numericValue = 0;
|
||||||
|
private string stringValue = string.Empty;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Properties
|
||||||
|
|
||||||
|
public decimal NumericValue
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return numericValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string StringValue
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return stringValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Methods
|
||||||
|
|
||||||
|
internal void ProduceOutput(decimal numericValue, string stringValue)
|
||||||
|
{
|
||||||
|
this.numericValue = numericValue;
|
||||||
|
this.stringValue = stringValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void ProduceOutput(FunctionValue functionValue)
|
||||||
|
{
|
||||||
|
switch (functionValue.Type)
|
||||||
|
{
|
||||||
|
case ValueType.Numeric:
|
||||||
|
decimal numericValue = Convert.ToDecimal(functionValue.Value);
|
||||||
|
ProduceOutput(numericValue, string.Empty);
|
||||||
|
break;
|
||||||
|
case ValueType.String:
|
||||||
|
if (functionValue.Value != null && functionValue.Value is string)
|
||||||
|
{
|
||||||
|
ProduceOutput(0, functionValue.Value!.ToString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ProduceOutput(0, string.Empty);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ValueType.None:
|
||||||
|
default:
|
||||||
|
ProduceOutput(0, string.Empty);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
31
src/core/Variable.cs
Normal file
31
src/core/Variable.cs
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace cs_mic.core
|
||||||
|
{
|
||||||
|
public class Variable
|
||||||
|
{
|
||||||
|
#region Members
|
||||||
|
|
||||||
|
private VariableType type;
|
||||||
|
|
||||||
|
private string name;
|
||||||
|
|
||||||
|
private object value;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constructor
|
||||||
|
|
||||||
|
public Variable()
|
||||||
|
{
|
||||||
|
this.type = VariableType.None;
|
||||||
|
this.value = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
18
src/core/VariableType.cs
Normal file
18
src/core/VariableType.cs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace cs_mic.core
|
||||||
|
{
|
||||||
|
public enum VariableType
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Numeric,
|
||||||
|
NumericArray,
|
||||||
|
String,
|
||||||
|
StringArray,
|
||||||
|
Expression,
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,30 +10,17 @@ COMPILER INTERPRETER
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private decimal calcValue = 0;
|
private FunctionValue value = new FunctionValue();
|
||||||
private string stringValue = string.Empty;
|
|
||||||
|
|
||||||
public decimal CalculatedValue
|
public decimal CalculatedValue
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return this.calcValue;
|
return this.value;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
this.calcValue = value;
|
this.value = value;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string StringValue
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return this.stringValue
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
this.stringValue = value
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,8 +113,7 @@ IGNORE cr + tab
|
||||||
PRODUCTIONS
|
PRODUCTIONS
|
||||||
|
|
||||||
INTERPRETER (.
|
INTERPRETER (.
|
||||||
decimal decimalValue = 0;
|
FunctionValue functionValue = new FunctionValue();
|
||||||
string stringValue = string.Empty;
|
|
||||||
bool success = true;
|
bool success = true;
|
||||||
if(this.interpreter == null)
|
if(this.interpreter == null)
|
||||||
{
|
{
|
||||||
|
@ -137,7 +123,7 @@ IGNORE cr + tab
|
||||||
=
|
=
|
||||||
|
|
||||||
IF(IsCompare())
|
IF(IsCompare())
|
||||||
Comparison<out success> (. this.calcValue = (success == true) ? 1 : 0; .)
|
Comparison<out success> (. this.functionValue = (success == true) ? FunctionValue.TRUE : FunctionValue.FALSE; .)
|
||||||
|
|
|
|
||||||
IF(IsAssignment())
|
IF(IsAssignment())
|
||||||
Assignment<out r>
|
Assignment<out r>
|
Loading…
Reference in a new issue