The promise of Irony if amazing. But it's HARD. Help.
I got the Expression sample running. But didn't understand all of it as it's pretty far along from a newbie/entry level.
Trying to go back to basics of a language of simple commands.
Assuming a Grammar (probably wrong ...but its my first time) to define one or more simple Commands:
public class MyGrammar : Irony.Parsing.Grammar
var program = new NonTerminal("program");
//Set the Grammar root:
this.Root = program;
//How do I define Guids?
var guid = new StringLiteral("guid");
var number = new NumberLiteral("number");
var v = new IdentifierTerminal("v");
var commandList = new NonTerminal("commandList");
var ringBellCommand = new NonTerminal("ringBellCommand", typeof(RingBellNode));
program.Rule = commandList;
commandList.Rule = MakePlusRule(commandList, null, ringBellCommand);
ringBellCommand.Rule = ToTerm("ring") + "bell" + (guid | number | v);
//Q: How do I define the second Command syntax?
//var honkHornCommand = new NonTerminal("honkHornCommand");
//honkHornCommand.Rule = ToTerm("honk") + "horn" + (guid | number | v);
//commandList.Rule = MakePlusRule(commandList, null, honkHornCommand);
this.LanguageFlags = LanguageFlags.CreateAst;
The command is backed by an ASTNode (that currently does nothing):
public class RingBellNode : AstNode
public override void Init(Irony.Ast.AstContext context, Irony.Parsing.ParseTreeNode treeNode)
protected override object DoEvaluate(Irony.Interpreter.ScriptThread thread)
//No idea what to do here yet.
I then run it with:
static void Main(string args)
MyGrammar myGrammar = new MyGrammar();
Parser p = new Parser(myGrammar);
//Q: what's wrong with grammer that I can't define more than one command?
ParseTree t = p.Parse("ring bell 3");
//Q: Now what? How do I execute the command defined in RingBellNode.Evaluate?
//Or is that not how it's done?
It parses. I've got child nodes in root. (although it won't let me parse more than one command at a time...but that can wait).
The question is...what's the point of a AST on its own? Isn't the AST just an artefact needed for it to in the end invoke the ASTNode?
Thank you for your help.