public override void Init(Irony.Parsing.ParsingContext context, Irony.Parsing.ParseTreeNode treeNode) { base.Init(context, treeNode); if (treeNode.ChildNodes[1].ChildNodes.Count > 0) { Irony.Parsing.ParseTreeNode n = ExpressionNode.Dig(treeNode.ChildNodes[1].ChildNodes[0]); LanguageOption Options = context.GetOptions(); if (n != null) { optExpression = ExpressionNode.Reduce(n); if (optExpression != null) { optExpression.Parent = this; ChildNodes.Add(optExpression); if (Options != LanguageOption.Extended && context.Source.Text[optExpression.Location.Position - 1] != '(') { context.AddParserMessage(Irony.Parsing.ParserErrorLevel.Error, ChildNodes[0].Span, "Return statement value must be parenthesized."); } } } else if (Options == LanguageOption.Extended && context.Source.Text[treeNode.ChildNodes[1].Span.Location.Position] == '(') { context.AddParserMessage(Irony.Parsing.ParserErrorLevel.Error, treeNode.ChildNodes[1].Span, "Empty parenthesis are not valid here (UOSL Extended)."); } } if (treeNode.ChildNodes[1].ChildNodes.Count > 1) { context.AddParserMessage(Irony.Parsing.ParserErrorLevel.Error, ChildNodes[1].Span, "Unexpected argument."); } }
public override void Init(Irony.Parsing.ParsingContext context, Irony.Parsing.ParseTreeNode treeNode) { base.Init(context, treeNode); var op = treeNode.FirstChild.FindTokenAndGetText(); Op = op; Argument = (AstNode)treeNode.LastChild.AstNode; }
public override void Init(Irony.Parsing.ParsingContext context, Irony.Parsing.ParseTreeNode treeNode) { base.Init(context, treeNode); var stringfiedValue = treeNode.FirstChild.FindTokenAndGetText(); bool value; if (!Boolean.TryParse(stringfiedValue, out value)) { var message = string.Format("{0} is not a valid boolean value", stringfiedValue); throw new AstException(this, message); } Value = value; AsString = stringfiedValue + "(boolean)"; }
public override void Init(Irony.Parsing.ParsingContext context, Irony.Parsing.ParseTreeNode treeNode) { base.Init(context, treeNode); if (treeNode.FirstChild.FindTokenAndGetText() == "NOT") { Left = AddChild("Arg", treeNode.LastChild); var opToken = treeNode.FirstChild.Token; Op = opToken.Text; } else { Left = AddChild("Arg", treeNode.ChildNodes[0]); Right = AddChild("Arg", treeNode.ChildNodes[2]); var opToken = treeNode.ChildNodes[1].FindToken(); Op = opToken.Text; } AsString = Op + "(operator)"; }
public override void CheckScope(Irony.Parsing.ParsingContext context) { // find function ScopedNode parent = this.Parent as ScopedNode; while (parent != null && !(parent is FunctionDefNode)) { parent = parent.Parent as ScopedNode; } if (parent != null) { if (parent.UoTypeToken == Types.Void) { if (optExpression != null) { context.AddParserMessage(Irony.Parsing.ParserErrorLevel.Error, this.Span, "A void function may not return an expression."); } } else if (optExpression == null) { context.AddParserMessage(Irony.Parsing.ParserErrorLevel.Error, this.Span, "This function must return an expression of type {0}.", parent.UoTypeToken.Value); } else { if (parent.UoTypeToken != optExpression.UoTypeToken) { if (optExpression.UoTypeToken == null) { context.AddParserMessage(Irony.Parsing.ParserErrorLevel.Info, optExpression.Span, "Return type indeterminate must be of type {0} at runtime.", parent.UoTypeToken.Value); } else { context.AddParserMessage(Irony.Parsing.ParserErrorLevel.Error, optExpression.Span, "Return type must be of type {0}. This expression evaluates to {1}", parent.UoTypeToken.Value, optExpression.UoTypeToken.Value); } } } } }
public override void Init(Irony.Parsing.ParsingContext context, Irony.Parsing.ParseTreeNode treeNode) { base.Init(context, treeNode); VariableName = treeNode.ChildNodes[1].FirstChild.FindTokenAndGetText(); }
public override void Init(Irony.Parsing.ParsingContext context, Irony.Parsing.ParseTreeNode treeNode) { base.Init(context, treeNode); Value = treeNode.Token.Value; AsString = Value.ToString(); }
public override void Init(Irony.Parsing.ParsingContext context, Irony.Parsing.ParseTreeNode treeNode) { base.Init(context, treeNode); SetUoToken((treeNode.FirstChild.Term as Tokenizer).Tokenize()); }
public override void Init(Irony.Parsing.ParsingContext context, Irony.Parsing.ParseTreeNode treeNode) { base.Init(context, treeNode); AsString = "NULL"; Value = null; }