private IExpression HandleIdentifierExpressionNode(IdentifierExpressionNode node) { if (node.IsLeftOfDotExpression) { // Если нода с идентификатором упоминалась как левая часть dot выражения, значит нужно в ПЕРВУЮ ОЧЕРЕДЬ проверить не является ли // этот идентификатор названием типа var foundType = _compilationContext.TypeLibrary.FindTypeByCodeNameString(node.Identifier); if (foundType.DataType != null) { return(new TypeHolderDummyExpression() { Type = foundType.DataType }); } } var result = new VariableReferenceExpression(); var scope = _tree.FindNearestScopeOwner().Scope; var variable = scope.FindVariableByName(node.Identifier); if (variable == null) { throw _compilationContext.ThrowCompilationError($"variable { node.Identifier } is not defined"); } result.Variable = variable; // Определяем выходное значение result.ReturnOutputSlot = new ExpressionSlot(result.Variable.Type, result); return(result); }
public override object VisitIdentifierExpression([NotNull] DoshikParser.IdentifierExpressionContext context) { SetWholeExpression(context); VisitChildren(context); _compilationContext.SetParsingAntlrContext(context); var node = new IdentifierExpressionNode(context); node.Identifier = context.IDENTIFIER().GetText(); Sequence.Sequence.Add(node); return(null); }