Две литеральные строковые константы не могут стоять подряд

This commit is contained in:
miks1965 2018-09-16 05:11:08 +03:00
parent f789d4b2f1
commit da91abdad4
10 changed files with 2104 additions and 2073 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3"; public const string Major = "3";
public const string Minor = "4"; public const string Minor = "4";
public const string Build = "2"; public const string Build = "2";
public const string Revision = "1787"; public const string Revision = "1790";
public const string MainVersion = Major + "." + Minor; public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=2
%REVISION%=1787
%MINOR%=4 %MINOR%=4
%REVISION%=1790
%COREVERSION%=2
%MAJOR%=3 %MAJOR%=3

View file

@ -1,9 +1,9 @@
// //
// This CSharp output file generated by Gardens Point LEX // This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301 // Version: 1.1.3.301
// Machine: IVAN-PC // Machine: DESKTOP-A6LT9RI
// DateTime: 27.08.2018 21:05:56 // DateTime: 16.09.2018 5:06:05
// UserName: Ivan // UserName: ?????????
// GPLEX input file <ABCPascal.lex> // GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource> // GPLEX frame file <embedded resource>
// //

View file

@ -80,7 +80,7 @@
%type <stn> typed_const_list1 typed_const_list optional_expr_list elem_list optional_expr_list_with_bracket expr_list const_elem_list1 const_func_expr_list case_label_list const_elem_list optional_const_func_expr_list elem_list1 %type <stn> typed_const_list1 typed_const_list optional_expr_list elem_list optional_expr_list_with_bracket expr_list const_elem_list1 const_func_expr_list case_label_list const_elem_list optional_const_func_expr_list elem_list1
%type <stn> enumeration_id expr_l1_list %type <stn> enumeration_id expr_l1_list
%type <stn> enumeration_id_list %type <stn> enumeration_id_list
%type <ex> const_simple_expr term simple_term typed_const typed_const_plus typed_var_init_expression expr expr_with_func_decl_lambda const_expr elem range_expr const_elem array_const factor relop_expr expr_dq expr_l1 simple_expr range_term range_factor %type <ex> const_simple_expr term simple_term typed_const typed_const_plus typed_var_init_expression expr expr_with_func_decl_lambda const_expr elem range_expr const_elem array_const factor relop_expr expr_dq expr_l1 expr_l1_func_decl_lambda simple_expr range_term range_factor
%type <ex> external_directive_ident init_const_expr case_label variable var_reference /*optional_write_expr*/ optional_read_expr simple_expr_or_nothing var_question_point %type <ex> external_directive_ident init_const_expr case_label variable var_reference /*optional_write_expr*/ optional_read_expr simple_expr_or_nothing var_question_point
%type <ob> for_cycle_type %type <ob> for_cycle_type
%type <ex> format_expr %type <ex> format_expr
@ -2360,13 +2360,13 @@ inclass_proc_func_decl_noclass
{ {
$$ = new procedure_definition($1 as procedure_header, $2 as proc_block, @$); $$ = new procedure_definition($1 as procedure_header, $2 as proc_block, @$);
} }
| tkFunction func_name fp_list tkColon fptype optional_method_modificators1 tkAssign expr_l1 tkSemiColon | tkFunction func_name fp_list tkColon fptype optional_method_modificators1 tkAssign expr_l1_func_decl_lambda tkSemiColon
{ {
$$ = SyntaxTreeBuilder.BuildShortFuncDefinition($3 as formal_parameters, $6 as procedure_attributes_list, $2 as method_name, $5 as type_definition, $8, @1.Merge(@6)); $$ = SyntaxTreeBuilder.BuildShortFuncDefinition($3 as formal_parameters, $6 as procedure_attributes_list, $2 as method_name, $5 as type_definition, $8, @1.Merge(@6));
if (parsertools.build_tree_for_formatter) if (parsertools.build_tree_for_formatter)
$$ = new short_func_definition($$ as procedure_definition); $$ = new short_func_definition($$ as procedure_definition);
} }
| tkFunction func_name fp_list optional_method_modificators1 tkAssign expr_l1 tkSemiColon | tkFunction func_name fp_list optional_method_modificators1 tkAssign expr_l1_func_decl_lambda tkSemiColon
{ {
$$ = SyntaxTreeBuilder.BuildShortFuncDefinition($3 as formal_parameters, $4 as procedure_attributes_list, $2 as method_name, null, $6, @1.Merge(@4)); $$ = SyntaxTreeBuilder.BuildShortFuncDefinition($3 as formal_parameters, $4 as procedure_attributes_list, $2 as method_name, null, $6, @1.Merge(@4));
if (parsertools.build_tree_for_formatter) if (parsertools.build_tree_for_formatter)
@ -3122,6 +3122,13 @@ expr_l1
| question_expr | question_expr
{ $$ = $1; } { $$ = $1; }
; ;
expr_l1_func_decl_lambda
: expr_l1
{ $$ = $1; }
| func_decl_lambda
{ $$ = $1; }
;
expr_dq expr_dq
: relop_expr : relop_expr
@ -3804,7 +3811,10 @@ literal_list
} }
| literal_list one_literal | literal_list one_literal
{ {
$$ = ($1 as literal_const_line).Add($2 as literal, @$); var line = $1 as literal_const_line;
if (line.literals.Last() is string_const && $2 is string_const)
parsertools.AddErrorFromResource("TWO_STRING_LITERALS_IN_SUCCESSION",@2);
$$ = line.Add($2 as literal, @$);
} }
; ;

File diff suppressed because it is too large Load diff

View file

@ -212,6 +212,8 @@ script=

View file

@ -1 +1 @@
!define VERSION '3.4.2.1787' !define VERSION '3.4.2.1790'

View file

@ -7772,7 +7772,7 @@ end;
function Trim(s: string): string; function Trim(s: string): string;
begin begin
Result := s.Trim; Result := s.Trim(' ');
end; end;
function TrimLeft(s: string): string; function TrimLeft(s: string): string;
@ -10344,13 +10344,13 @@ end;
/// Преобразует строку в массив целых /// Преобразует строку в массив целых
function ToIntegers(Self: string): array of integer; extensionmethod; function ToIntegers(Self: string): array of integer; extensionmethod;
begin begin
Result := Self.ToWords().Select(s -> StrToInt(s)).ToArray(); Result := Self.ToWords().ConvertAll(s -> StrToInt(s));
end; end;
/// Преобразует строку в массив вещественных /// Преобразует строку в массив вещественных
function ToReals(Self: string): array of real; extensionmethod; function ToReals(Self: string): array of real; extensionmethod;
begin begin
Result := Self.ToWords().Select(s -> StrToFloat(s)).ToArray(); Result := Self.ToWords().ConvertAll(s -> StrToFloat(s));
end; end;
/// Возвращает инверсию строки /// Возвращает инверсию строки

View file

@ -0,0 +1,3 @@
begin
var s := 'sfgj' 'ery';
end.

View file

@ -66,3 +66,4 @@ DOT_QUECTION_IN_SHORT_FUN=Выражение с ?. не может фигури
BAD_INT2=Слишком маленькое целое BAD_INT2=Слишком маленькое целое
INVALID_INTERFACE_MEMBER=Члены интерфейса не могут иметь определение INVALID_INTERFACE_MEMBER=Члены интерфейса не могут иметь определение
EXTENDED_INDEXED_PROPERTIES=Индексные свойства не могут быть расширенными EXTENDED_INDEXED_PROPERTIES=Индексные свойства не могут быть расширенными
TWO_STRING_LITERALS_IN_SUCCESSION=Две литеральные строковые константы не могут стоять подряд