function ReadInteger2(message: string): (integer,integer);
и вынос повторяющихся вычислений в ?.
This commit is contained in:
parent
18447ac9d9
commit
be24727b97
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
|||
public const string Major = "3";
|
||||
public const string Minor = "2";
|
||||
public const string Build = "0";
|
||||
public const string Revision = "1483";
|
||||
public const string Revision = "1486";
|
||||
|
||||
public const string MainVersion = Major + "." + Minor;
|
||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%COREVERSION%=0
|
||||
%REVISION%=1483
|
||||
%MINOR%=2
|
||||
%REVISION%=1486
|
||||
%COREVERSION%=0
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.2.0.1483'
|
||||
!define VERSION '3.2.0.1486'
|
||||
|
|
|
|||
|
|
@ -60,20 +60,6 @@ namespace SyntaxVisitors.SugarVisitors
|
|||
return q;
|
||||
}
|
||||
|
||||
public question_colon_expression ConvertToQCE1(dot_question_node dqn)
|
||||
{
|
||||
addressed_value left = dqn.left;
|
||||
addressed_value right = dqn.right;
|
||||
|
||||
var eq = new bin_expr(left, new nil_const(), Operators.Equal, left.source_context);
|
||||
|
||||
var nr = Into(left, right);
|
||||
|
||||
var q = new question_colon_expression(eq, new nil_const(), nr, dqn.source_context);
|
||||
nr.Parent = q;
|
||||
return q;
|
||||
}
|
||||
|
||||
public addressed_value Into(addressed_value x, addressed_value v) // При возникновении новой конструкции в грамматике variable добавить обработку сюда
|
||||
{
|
||||
if (v.GetType() == typeof(dot_question_node))
|
||||
|
|
@ -131,12 +117,68 @@ namespace SyntaxVisitors.SugarVisitors
|
|||
}
|
||||
}
|
||||
|
||||
private int num = 0;
|
||||
|
||||
public string UniqueNumStr()
|
||||
{
|
||||
num++;
|
||||
return num.ToString();
|
||||
}
|
||||
|
||||
|
||||
/*public question_colon_expression ConvertToQCE1(dot_question_node dqn)
|
||||
{
|
||||
addressed_value left = dqn.left;
|
||||
addressed_value right = dqn.right;
|
||||
|
||||
var eq = new bin_expr(left, new nil_const(), Operators.Equal, left.source_context);
|
||||
|
||||
var nr = Into(left, right);
|
||||
|
||||
var q = new question_colon_expression(eq, new nil_const(), nr, dqn.source_context);
|
||||
nr.Parent = q;
|
||||
return q;
|
||||
}*/
|
||||
|
||||
public question_colon_expression ConvertToQCE1(dot_question_node dqn, string name)
|
||||
{
|
||||
addressed_value right = dqn.right;
|
||||
|
||||
var eq = new bin_expr(new ident(name), new nil_const(), Operators.Equal, dqn.left.source_context);
|
||||
|
||||
var nr = Into(new ident(name), right);
|
||||
|
||||
var q = new question_colon_expression(eq, new nil_const(), nr, dqn.source_context);
|
||||
nr.Parent = q;
|
||||
return q;
|
||||
}
|
||||
|
||||
public override void visit(dot_question_node dqn)
|
||||
{
|
||||
var st = dqn.Parent;
|
||||
while (!(st is statement))
|
||||
st = st.Parent;
|
||||
var tname = "#dqn_temp" + UniqueNumStr();
|
||||
var tt = new var_statement(new ident(tname), dqn.left);
|
||||
tt.var_def.Parent = tt;
|
||||
var l = new List<statement>();
|
||||
l.Add(tt);
|
||||
l.Add(st as statement);
|
||||
|
||||
var qce = ConvertToQCE1(dqn, tname);
|
||||
var sug = sugared_addressed_value.NewP(dqn, qce, dqn.source_context);
|
||||
ReplaceUsingParent(dqn, sug);
|
||||
visit(qce);
|
||||
|
||||
ReplaceStatementUsingParent(st as statement, l);
|
||||
visit(tt);
|
||||
}
|
||||
/*public override void visit(dot_question_node dqn)
|
||||
{
|
||||
var qce = ConvertToQCE1(dqn);
|
||||
var sug = sugared_addressed_value.NewP(dqn, qce, dqn.source_context);
|
||||
ReplaceUsingParent(dqn, sug);
|
||||
visit(qce);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -590,15 +590,57 @@ function ReadlnChar2: (char,char);
|
|||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnString2: (string,string);
|
||||
|
||||
/// Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры
|
||||
function ReadInteger3: (integer,integer,integer);
|
||||
/// Возвращает кортеж из трёх значений типа real, введенных с клавиатуры
|
||||
function ReadReal3: (real,real,real);
|
||||
/// Возвращает кортеж из трёх значений типа char, введенных с клавиатуры
|
||||
function ReadChar3: (char,char,char);
|
||||
/// Возвращает кортеж из трёх значений типа string, введенных с клавиатуры
|
||||
function ReadString3: (string,string,string);
|
||||
/// Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnInteger3: (integer,integer,integer);
|
||||
/// Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnReal3: (real,real,real);
|
||||
/// Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnChar3: (char,char,char);
|
||||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnString3: (string,string,string);
|
||||
|
||||
/// Возвращает кортеж из двух значений типа integer, введенных с клавиатуры
|
||||
function ReadInteger2(message: string): (integer,integer);
|
||||
/// Возвращает кортеж из двух значений типа real, введенных с клавиатуры
|
||||
function ReadReal2(message: string): (real,real);
|
||||
/// Возвращает кортеж из двух значений типа char, введенных с клавиатуры
|
||||
function ReadChar2(message: string): (char,char);
|
||||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры
|
||||
function ReadString2(message: string): (string,string);
|
||||
/// Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnInteger2(message: string): (integer,integer);
|
||||
/// Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnReal2(message: string): (real,real);
|
||||
/// Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnChar2(message: string): (char,char);
|
||||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnString2(message: string): (string,string);
|
||||
|
||||
/// Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры
|
||||
function ReadInteger3(message: string): (integer,integer,integer);
|
||||
/// Возвращает кортеж из трёх значений типа real, введенных с клавиатуры
|
||||
function ReadReal3(message: string): (real,real,real);
|
||||
/// Возвращает кортеж из трёх значений типа char, введенных с клавиатуры
|
||||
function ReadChar3(message: string): (char,char,char);
|
||||
/// Возвращает кортеж из трёх значений типа string, введенных с клавиатуры
|
||||
function ReadString3(message: string): (string,string,string);
|
||||
/// Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnInteger3(message: string): (integer,integer,integer);
|
||||
/// Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnReal3(message: string): (real,real,real);
|
||||
/// Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnChar3(message: string): (char,char,char);
|
||||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnString3(message: string): (string,string,string);
|
||||
|
||||
|
||||
/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры
|
||||
function ReadInteger(prompt: string): integer;
|
||||
|
|
@ -4647,6 +4689,23 @@ function ReadlnReal3 := (ReadReal,ReadReal,ReadlnReal);
|
|||
function ReadlnChar3 := (ReadChar,ReadChar,ReadlnChar);
|
||||
function ReadlnString3 := (ReadString,ReadString,ReadlnString);
|
||||
|
||||
function ReadInteger2(message: string) := (ReadInteger(message),ReadInteger);
|
||||
function ReadReal2(message: string) := (ReadReal(message),ReadReal);
|
||||
function ReadChar2(message: string) := (ReadChar(message),ReadChar);
|
||||
function ReadString2(message: string) := (ReadString(message),ReadString);
|
||||
function ReadlnInteger2(message: string) := (ReadInteger(message),ReadlnInteger);
|
||||
function ReadlnReal2(message: string) := (ReadReal(message),ReadlnReal);
|
||||
function ReadlnChar2(message: string) := (ReadChar(message),ReadlnChar);
|
||||
function ReadlnString2(message: string) := (ReadString(message),ReadlnString);
|
||||
function ReadInteger3(message: string) := (ReadInteger(message),ReadInteger,ReadInteger);
|
||||
function ReadReal3(message: string) := (ReadReal(message),ReadReal,ReadReal);
|
||||
function ReadChar3(message: string) := (ReadChar(message),ReadChar,ReadChar);
|
||||
function ReadString3(message: string) := (ReadString(message),ReadString,ReadString);
|
||||
function ReadlnInteger3(message: string) := (ReadInteger(message),ReadInteger,ReadlnInteger);
|
||||
function ReadlnReal3(message: string) := (ReadReal(message),ReadReal,ReadlnReal);
|
||||
function ReadlnChar3(message: string) := (ReadChar(message),ReadChar,ReadlnChar);
|
||||
function ReadlnString3(message: string) := (ReadString(message),ReadString,ReadlnString);
|
||||
|
||||
|
||||
// Read with prompt
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -590,15 +590,57 @@ function ReadlnChar2: (char,char);
|
|||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnString2: (string,string);
|
||||
|
||||
/// Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры
|
||||
function ReadInteger3: (integer,integer,integer);
|
||||
/// Возвращает кортеж из трёх значений типа real, введенных с клавиатуры
|
||||
function ReadReal3: (real,real,real);
|
||||
/// Возвращает кортеж из трёх значений типа char, введенных с клавиатуры
|
||||
function ReadChar3: (char,char,char);
|
||||
/// Возвращает кортеж из трёх значений типа string, введенных с клавиатуры
|
||||
function ReadString3: (string,string,string);
|
||||
/// Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnInteger3: (integer,integer,integer);
|
||||
/// Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnReal3: (real,real,real);
|
||||
/// Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnChar3: (char,char,char);
|
||||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnString3: (string,string,string);
|
||||
|
||||
/// Возвращает кортеж из двух значений типа integer, введенных с клавиатуры
|
||||
function ReadInteger2(message: string): (integer,integer);
|
||||
/// Возвращает кортеж из двух значений типа real, введенных с клавиатуры
|
||||
function ReadReal2(message: string): (real,real);
|
||||
/// Возвращает кортеж из двух значений типа char, введенных с клавиатуры
|
||||
function ReadChar2(message: string): (char,char);
|
||||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры
|
||||
function ReadString2(message: string): (string,string);
|
||||
/// Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnInteger2(message: string): (integer,integer);
|
||||
/// Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnReal2(message: string): (real,real);
|
||||
/// Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnChar2(message: string): (char,char);
|
||||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnString2(message: string): (string,string);
|
||||
|
||||
/// Возвращает кортеж из трёх значений типа integer, введенных с клавиатуры
|
||||
function ReadInteger3(message: string): (integer,integer,integer);
|
||||
/// Возвращает кортеж из трёх значений типа real, введенных с клавиатуры
|
||||
function ReadReal3(message: string): (real,real,real);
|
||||
/// Возвращает кортеж из трёх значений типа char, введенных с клавиатуры
|
||||
function ReadChar3(message: string): (char,char,char);
|
||||
/// Возвращает кортеж из трёх значений типа string, введенных с клавиатуры
|
||||
function ReadString3(message: string): (string,string,string);
|
||||
/// Возвращает кортеж из двух значений типа integer, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnInteger3(message: string): (integer,integer,integer);
|
||||
/// Возвращает кортеж из двух значений типа real, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnReal3(message: string): (real,real,real);
|
||||
/// Возвращает кортеж из двух значений типа char, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnChar3(message: string): (char,char,char);
|
||||
/// Возвращает кортеж из двух значений типа string, введенных с клавиатуры, и переходит на следующую строку ввода
|
||||
function ReadlnString3(message: string): (string,string,string);
|
||||
|
||||
|
||||
/// Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры
|
||||
function ReadInteger(prompt: string): integer;
|
||||
|
|
@ -4647,6 +4689,23 @@ function ReadlnReal3 := (ReadReal,ReadReal,ReadlnReal);
|
|||
function ReadlnChar3 := (ReadChar,ReadChar,ReadlnChar);
|
||||
function ReadlnString3 := (ReadString,ReadString,ReadlnString);
|
||||
|
||||
function ReadInteger2(message: string) := (ReadInteger(message),ReadInteger);
|
||||
function ReadReal2(message: string) := (ReadReal(message),ReadReal);
|
||||
function ReadChar2(message: string) := (ReadChar(message),ReadChar);
|
||||
function ReadString2(message: string) := (ReadString(message),ReadString);
|
||||
function ReadlnInteger2(message: string) := (ReadInteger(message),ReadlnInteger);
|
||||
function ReadlnReal2(message: string) := (ReadReal(message),ReadlnReal);
|
||||
function ReadlnChar2(message: string) := (ReadChar(message),ReadlnChar);
|
||||
function ReadlnString2(message: string) := (ReadString(message),ReadlnString);
|
||||
function ReadInteger3(message: string) := (ReadInteger(message),ReadInteger,ReadInteger);
|
||||
function ReadReal3(message: string) := (ReadReal(message),ReadReal,ReadReal);
|
||||
function ReadChar3(message: string) := (ReadChar(message),ReadChar,ReadChar);
|
||||
function ReadString3(message: string) := (ReadString(message),ReadString,ReadString);
|
||||
function ReadlnInteger3(message: string) := (ReadInteger(message),ReadInteger,ReadlnInteger);
|
||||
function ReadlnReal3(message: string) := (ReadReal(message),ReadReal,ReadlnReal);
|
||||
function ReadlnChar3(message: string) := (ReadChar(message),ReadChar,ReadlnChar);
|
||||
function ReadlnString3(message: string) := (ReadString(message),ReadString,ReadlnString);
|
||||
|
||||
|
||||
// Read with prompt
|
||||
|
||||
|
|
|
|||
|
|
@ -11,4 +11,4 @@ ONE_TKIDENTIFIER=Type here must be identifier
|
|||
SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR=Sugared node {0} must not be visited in syntax_tree_visitor
|
||||
MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}=Missed semantic check for sugared node {0}
|
||||
TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Count of Tuple elements must be <=7
|
||||
|
||||
OPERATOR_DQ_MUST_BE_USED_WITH_A_REFERENCE_TYPE_VALUETYPE=Left operand of ?. operation must have reference type
|
||||
|
|
|
|||
|
|
@ -11,4 +11,4 @@ ONE_TKIDENTIFIER=В качестве типа ожидался идентифи
|
|||
SUGARED_NODE_{0}_IN_SYNTAX_TREE_VISITOR=Сахарный узел {0} не должен обходиться в syntax_tree_visitor. Обратитесь к разработчикам PascalABC.NET
|
||||
MISSED_SEMANTIC_CHECK_FOR_SUGARED_NODE_{0}=Отсутствует семантическая проверка для сахарного узла {0}
|
||||
TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7=Количество элементов кортежа не должно быть больше 7
|
||||
OPERATOR_DQ_MUST_BE_USED_WITH_A_REFERENCE_TYPE_VALUETYPE=Оператор ?. может применяться только к ссылочным типам
|
||||
OPERATOR_DQ_MUST_BE_USED_WITH_A_REFERENCE_TYPE_VALUETYPE=Левый операнд операции ?. должен иметь ссылочный тип
|
||||
Binary file not shown.
Loading…
Reference in a new issue