|
using System;
using System.Text;
using System.Collections;
using System.Text.RegularExpressions;
namespace YAMP
{
class FunctionExpression : Expression
{
FunctionDelegate _func;
string _name;
BracketExpression _child;
public FunctionExpression () : base(@"[A-Za-z]+[A-Za-z0-9]*\(.*\)")
{
}
public FunctionExpression (Match match) : this()
{
mx = match;
}
public override Expression Create(Match match)
{
return new FunctionExpression(match);
}
public override Value Interpret (Hashtable symbols)
{
var val = _child.Interpret(symbols);
return _func(val);
}
public override string Set (string input)
{
var sb = new StringBuilder();
var pos = input.IndexOf('(');
_name = input.Substring(0, pos);
sb.Append(_name).Append("(");
_func = Tokens.Instance.FindFunction(_name);
_child = new BracketExpression();
_child.Offset = Offset + pos;
input = _child.Set(input.Substring(pos));
sb.Append(_child.Input).Append(")");
_input = sb.ToString();
return input;
}
public override string ToString ()
{
var sb = new StringBuilder();
sb.Append(_name).AppendLine(" [ ExpressionType = Function ]");
sb.Append(_child.ToString());
return sb.ToString();
}
public override void RegisterToken ()
{
SymbolExpression.SetFunctionPattern(Pattern);
}
}
}
|
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.