|
using System;
using System.Text;
using System.Collections;
using System.Text.RegularExpressions;
namespace YAMP
{
class SymbolExpression : Expression
{
static Regex fx;
FunctionExpression func;
public static void SetFunctionPattern(string pattern)
{
fx = new Regex("^" + pattern);
}
public override Expression Create( Match match)
{
return new SymbolExpression(match);
}
public bool IsSymbol
{
get { return func == null; }
}
public string SymbolName
{
get { return _input; }
}
public SymbolExpression () : base(@"[A-Za-z]+[A-Za-z0-9]*\b")
{
}
public SymbolExpression (Match match) : this()
{
mx = match;
}
public override Value Interpret (Hashtable symbols)
{
if(func != null)
return func.Interpret(symbols);
if(symbols.ContainsKey(_input))
return new ScalarValue((double)symbols[_input]);
var variable = Tokens.Instance.GetVariable(_input);
if (variable != null)
return variable;
return Tokens.Instance.FindConstants(_input);
}
public override string ToString ()
{
if(func != null)
return func.ToString();
return base.ToString();
}
public override string Set (string input)
{
var m = fx.Match(input);
if(m.Success)
{
func = new FunctionExpression(m);
input = func.Set(input);
_input = func.Input;
return input;
}
return base.Set (input);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Florian lives in Munich, Germany. He started his programming career with Perl. After programming C/C++ for some years he discovered his favorite programming language C#. He did work at Siemens as a programmer until he decided to study Physics.
During his studies he worked as an IT consultant for various companies. After graduating with a PhD in theoretical particle Physics he is working as a senior technical consultant in the field of home automation and IoT.
Florian has been giving lectures in C#, HTML5 with CSS3 and JavaScript, software design, and other topics. He is regularly giving talks at user groups, conferences, and companies. He is actively contributing to open-source projects. Florian is the maintainer of AngleSharp, a completely managed browser engine.