|
|
|
using System.Runtime.InteropServices;
|
|
|
|
using Irony.Interpreter;
|
|
|
|
using Irony.Parsing;
|
|
|
|
|
|
|
|
namespace irules.core
|
|
|
|
{
|
|
|
|
public class ClauseChecker
|
|
|
|
{
|
|
|
|
public TokenList LastScriptTokens => app.LastScript?.Tokens;
|
|
|
|
|
|
|
|
public ParseTree LatestParsedTree { get; private set; }
|
|
|
|
|
|
|
|
ScriptApp app;
|
|
|
|
public ClauseChecker()
|
|
|
|
{
|
|
|
|
ClauseGrammar g = new ClauseGrammar();
|
|
|
|
LanguageData d = new LanguageData(g);
|
|
|
|
LanguageRuntime r = new LanguageRuntime(d);
|
|
|
|
app = new ScriptApp(r);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public virtual AppStatus Parse(string problem)
|
|
|
|
{
|
|
|
|
LatestParsedTree = app.Parser.Parse(problem);
|
|
|
|
try {
|
|
|
|
switch (app.Status)
|
|
|
|
{
|
|
|
|
case AppStatus.Ready:
|
|
|
|
var pm = app.GetParserMessages();
|
|
|
|
var output = app.GetOutput();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (ScriptException ex)
|
|
|
|
{
|
|
|
|
throw;
|
|
|
|
}
|
|
|
|
return app.Status;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|