#1232 теперь нет потери контекста
This commit is contained in:
parent
f36a650f9c
commit
caba3ede5f
|
|
@ -15,22 +15,24 @@
|
|||
<body>
|
||||
<H1>Кортежи</H1>
|
||||
<p>Кортеж - это тип данных, являющийся аналогом <a href="records.html">
|
||||
записи</a>. Как и запись, кортеж представляет собой набор элементов разных
|
||||
типов. В отличие от записей, тип кортежей описывается очень просто. Кроме того,
|
||||
записи</a> или <a href="../Classes/index_classes.html">класса</a>. Как запись
|
||||
или класс, кортеж представляет собой набор элементов разных
|
||||
типов, но описывается существенно проще. Кроме того,
|
||||
поля кортежа имеют предопределенные имена и являются неизменными: поменять поля кортежа
|
||||
после его создания невозможно.</p>
|
||||
<h2>Тип кортежа</h2>
|
||||
<p>Для типа кортежа используется следующая запись:</p>
|
||||
<blockquote>
|
||||
<code><b>var</b> t: (string,integer);</code>
|
||||
</blockquote>
|
||||
<p>Данная запись похожа на объявление <a href="enum_subrange.html">перечислимого типа</a>. Если в круглых
|
||||
скобках - новые имена, то это перечислимый тип, а если имена типов, то это - тип кортежа.</p>
|
||||
<p>Кортежи представляются типом System.Tuple платформы .NET:</p>
|
||||
<blockquote>
|
||||
<code><b>var</b> t: System.Tuple<string,integer>;</code>
|
||||
</blockquote>
|
||||
|
||||
<p>Для типа кортежа может быть использована сокращенная запись:</p>
|
||||
<blockquote>
|
||||
<code><b>var</b> t: (string,integer);</code>
|
||||
</blockquote>
|
||||
<p>Данная запись похожа на объявление перечислимого типа. Если в круглых
|
||||
скобках - новые имена, то это перечислимый тип, а если имена типов, то это - тип кортежа.</p>
|
||||
<p>Однако данное представление может поменяться в будущем.</p>
|
||||
|
||||
<h2>Конструирование значений типа кортеж</h2>
|
||||
<p>Значения типа кортеж могут быть сконструированы в виде заключенного в круглые
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
//
|
||||
// This CSharp output file generated by Gardens Point LEX
|
||||
// Version: 1.1.3.301
|
||||
// Machine: IVAN-PC
|
||||
// DateTime: 23.09.2018 13:03:23
|
||||
// UserName: Ivan
|
||||
// Machine: DESKTOP-A6LT9RI
|
||||
// DateTime: 23.09.2018 22:34:25
|
||||
// UserName: ?????????
|
||||
// GPLEX input file <ABCPascal.lex>
|
||||
// GPLEX frame file <embedded resource>
|
||||
//
|
||||
|
|
|
|||
|
|
@ -2125,7 +2125,7 @@ property_specifiers
|
|||
}
|
||||
else // ðàñøèðåííûå ñâîéñòâà
|
||||
{
|
||||
var id = NewId("#GetGen");
|
||||
var id = NewId("#GetGen", @2);
|
||||
procedure_definition pr = null;
|
||||
if (!parsertools.build_tree_for_formatter)
|
||||
pr = CreateAndAddToClassReadFunc($2, id, @2);
|
||||
|
|
@ -2146,7 +2146,7 @@ property_specifiers
|
|||
}
|
||||
else // ðàñøèðåííûå ñâîéñòâà
|
||||
{
|
||||
var id = NewId("#SetGen");
|
||||
var id = NewId("#SetGen", @2);
|
||||
procedure_definition pr = null;
|
||||
if (!parsertools.build_tree_for_formatter)
|
||||
pr = CreateAndAddToClassWriteProc($2 as statement,id,@2);
|
||||
|
|
@ -2169,7 +2169,7 @@ write_property_specifiers
|
|||
}
|
||||
else
|
||||
{
|
||||
var id = NewId("#SetGen");
|
||||
var id = NewId("#SetGen", @2);
|
||||
procedure_definition pr = null;
|
||||
if (!parsertools.build_tree_for_formatter)
|
||||
pr = CreateAndAddToClassWriteProc($2 as statement,id,@2);
|
||||
|
|
@ -2188,7 +2188,7 @@ read_property_specifiers
|
|||
}
|
||||
else
|
||||
{
|
||||
var id = NewId("#GetGen");
|
||||
var id = NewId("#GetGen", @2);
|
||||
procedure_definition pr = null;
|
||||
if (!parsertools.build_tree_for_formatter)
|
||||
pr = CreateAndAddToClassReadFunc($2,id,@2);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
// (see accompanying GPPGcopyright.rtf)
|
||||
|
||||
// GPPG version 1.3.6
|
||||
// Machine: IVAN-PC
|
||||
// DateTime: 23.09.2018 13:03:25
|
||||
// UserName: Ivan
|
||||
// Machine: DESKTOP-A6LT9RI
|
||||
// DateTime: 23.09.2018 22:34:26
|
||||
// UserName: ?????????
|
||||
// Input file <ABCPascal.y>
|
||||
|
||||
// options: no-lines gplex
|
||||
|
|
@ -4324,7 +4324,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
|
|||
}
|
||||
else // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
var id = NewId("#GetGen");
|
||||
var id = NewId("#GetGen", LocationStack[LocationStack.Depth-2]);
|
||||
procedure_definition pr = null;
|
||||
if (!parsertools.build_tree_for_formatter)
|
||||
pr = CreateAndAddToClassReadFunc(ValueStack[ValueStack.Depth-2].ex, id, LocationStack[LocationStack.Depth-2]);
|
||||
|
|
@ -4346,7 +4346,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
|
|||
}
|
||||
else // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
var id = NewId("#SetGen");
|
||||
var id = NewId("#SetGen", LocationStack[LocationStack.Depth-2]);
|
||||
procedure_definition pr = null;
|
||||
if (!parsertools.build_tree_for_formatter)
|
||||
pr = CreateAndAddToClassWriteProc(ValueStack[ValueStack.Depth-2].stn as statement,id,LocationStack[LocationStack.Depth-2]);
|
||||
|
|
@ -4367,7 +4367,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
|
|||
}
|
||||
else
|
||||
{
|
||||
var id = NewId("#SetGen");
|
||||
var id = NewId("#SetGen", LocationStack[LocationStack.Depth-1]);
|
||||
procedure_definition pr = null;
|
||||
if (!parsertools.build_tree_for_formatter)
|
||||
pr = CreateAndAddToClassWriteProc(ValueStack[ValueStack.Depth-1].stn as statement,id,LocationStack[LocationStack.Depth-1]);
|
||||
|
|
@ -4383,7 +4383,7 @@ public partial class GPPGParser: ShiftReduceParser<PascalABCSavParser.Union, Lex
|
|||
}
|
||||
else
|
||||
{
|
||||
var id = NewId("#GetGen");
|
||||
var id = NewId("#GetGen", LocationStack[LocationStack.Depth-1]);
|
||||
procedure_definition pr = null;
|
||||
if (!parsertools.build_tree_for_formatter)
|
||||
pr = CreateAndAddToClassReadFunc(ValueStack[ValueStack.Depth-1].ex,id,LocationStack[LocationStack.Depth-1]);
|
||||
|
|
|
|||
|
|
@ -216,5 +216,6 @@ script=
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -540,10 +540,10 @@ namespace GPPGParserScanner
|
|||
|
||||
private int num1 = 0;
|
||||
|
||||
public ident NewId(string prefix)
|
||||
public ident NewId(string prefix, SourceContext sc = null)
|
||||
{
|
||||
num1++;
|
||||
return new ident(prefix + num1.ToString());
|
||||
return new ident(prefix + num1.ToString(),sc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,11 @@ namespace SyntaxVisitors.SugarVisitors
|
|||
DefaultVisit(ne);
|
||||
}
|
||||
|
||||
public override void visit(name_assign_expr ne)
|
||||
{
|
||||
DefaultVisit(ne);
|
||||
}
|
||||
|
||||
|
||||
public override void visit(tuple_node tup)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -19412,8 +19412,8 @@ namespace PascalABCCompiler.TreeConverter
|
|||
var names = l.name_expr.Select(x=>x.name).ToList();
|
||||
var strnames = names.Select(id=>id.name).ToList(); // преобразование idents в строки
|
||||
|
||||
var tt1 = l.name_expr[0].expr;
|
||||
var tse = convert_strong(tt1);
|
||||
/*var tt1 = l.name_expr[0].expr;
|
||||
var tse = convert_strong(tt1);*/
|
||||
|
||||
var semantic_types = l.name_expr.Select(x => convert_strong(x.expr).type).ToList();
|
||||
var types = semantic_types.Select(x => SyntaxTreeBuilder.BuildSemanticType(x)).ToList();
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Reference in a new issue