Skip to content

Commit

Permalink
WI #2569 Support REPLACE with LEADING/TRAILING (#2572)
Browse files Browse the repository at this point in the history
  • Loading branch information
efr15 committed Sep 12, 2023
1 parent eee9c9d commit be0a114
Show file tree
Hide file tree
Showing 39 changed files with 567 additions and 162 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,18 +36,18 @@
[21,22:by]<BY>
[24,27:titi]<UserDefinedWord>
[28,28+:.]<PeriodSeparator>
Line 12[16,19] <27, Error, Syntax> - Syntax error : mismatched input 'toto' expecting expecting {'==', OFF}
Line 12[16,19] <27, Error, Syntax> - Syntax error : mismatched input 'toto' expecting expecting {'==', LEADING, OFF, TRAILING}

-- Line 13 --
*** DIRECTIVE INVALID SYNTAX -> REPLACE ([8,14:REPLACE]<REPLACE>[16,17:==]<PseudoTextDelimiter>[18,18: ]<SpaceSeparator>[19,22:toto]<UserDefinedWord>[23,23: ]<SpaceSeparator>[24,25:==]<PseudoTextDelimiter>[27,28:by]<BY>[30,31:==]<PseudoTextDelimiter>[32,32: ]<SpaceSeparator>[33,36:titi]<UserDefinedWord>[37,37: ]<SpaceSeparator>[38,39+:==]<PseudoTextDelimiter>) ***
Line 14[8,14] <27, Error, Syntax> - Syntax error : mismatched input 'REPLACE' expecting expecting {Literal, UserDefinedWord, ReservedWord, '.', '==', END-EXEC, BY}
Line 14[8,14] <27, Error, Syntax> - Syntax error : mismatched input 'REPLACE' expecting expecting {Literal, UserDefinedWord, ReservedWord, '.', '==', END-EXEC, BY, LEADING, TRAILING}

-- Line 14 --
*** DIRECTIVE INVALID SYNTAX -> REPLACE ([8,14:REPLACE]<REPLACE>[16,17:==]<PseudoTextDelimiter>[18,18: ]<SpaceSeparator>[19,22:toto]<UserDefinedWord>[23,23: ]<SpaceSeparator>[24,25:= ]<EqualOperator>[26,27:by]<BY>[28,28: ]<SpaceSeparator>[29,30:==]<PseudoTextDelimiter>) ***
[32,35:titi]<UserDefinedWord>
[37,38:==]<PseudoTextDelimiter>
[39,39+:.]<PeriodSeparator>
Line 14[32,35] <27, Error, Syntax> - Syntax error : mismatched input 'titi' expecting expecting {Literal, UserDefinedWord, ReservedWord, '.', '==', END-EXEC, BY}
Line 14[32,35] <27, Error, Syntax> - Syntax error : mismatched input 'titi' expecting expecting {Literal, UserDefinedWord, ReservedWord, '.', '==', END-EXEC, BY, LEADING, TRAILING}

-- Line 15 --
*** DIRECTIVE INVALID SYNTAX -> REPLACE ([8,14:REPLACE]<REPLACE>[15,15: ]<SpaceSeparator>[16,17:==]<PseudoTextDelimiter>[19,22:toto]<UserDefinedWord>[24,25:==]<PseudoTextDelimiter>[26,26+:.]<PeriodSeparator>) ***
Expand All @@ -58,7 +58,7 @@ Line 15[26,26] <27, Error, Syntax> - Syntax error : mismatched input '.' expecti
[40,40: ]<SpaceSeparator>
[41,45:tutu1]<UserDefinedWord>
[46,46+:.]<PeriodSeparator>
Line 16[41,45] <27, Error, Syntax> - Syntax error : mismatched input 'tutu1' expecting expecting {Literal, UserDefinedWord, ReservedWord, '.', '==', END-EXEC, BY}
Line 16[41,45] <27, Error, Syntax> - Syntax error : mismatched input 'tutu1' expecting expecting {Literal, UserDefinedWord, ReservedWord, '.', '==', END-EXEC, BY, LEADING, TRAILING}

-- Line 17 --
*** DIRECTIVE INVALID SYNTAX -> REPLACE ([8,14:REPLACE]<REPLACE>[15,15: ]<SpaceSeparator>[16,17:==]<PseudoTextDelimiter>[19,22:toto]<UserDefinedWord>[24,25:==]<PseudoTextDelimiter>[26,26: ]<SpaceSeparator>[27,28:by]<BY>[29,29: ]<SpaceSeparator>[30,31:==]<PseudoTextDelimiter>[33,36:titi]<UserDefinedWord>[38,39:==]<PseudoTextDelimiter>[40,40: ]<SpaceSeparator>[41,42:==]<PseudoTextDelimiter>[44,48:tutu2]<UserDefinedWord>[49,50:==]<PseudoTextDelimiter>[51,51+:.]<PeriodSeparator>) ***
Expand All @@ -78,11 +78,11 @@ Line 18[54,54] <27, Error, Syntax> - Syntax error : mismatched input '.' expecti
[52,53:==]<PseudoTextDelimiter>
[54,54: ]<SpaceSeparator>
[55,55+:.]<PeriodSeparator>
Line 19[41,42] <27, Error, Syntax> - Syntax error : mismatched input 'by' expecting expecting {'.', '=='}
Line 19[41,42] <27, Error, Syntax> - Syntax error : mismatched input 'by' expecting expecting {'.', '==', LEADING, TRAILING}

-- Line 20 --
*** DIRECTIVE INVALID SYNTAX -> REPLACE ([8,14:REPLACE]<REPLACE>) ***
Line 21[8,14] <27, Error, Syntax> - Syntax error : mismatched input 'REPLACE' expecting expecting {'==', OFF}
Line 21[8,14] <27, Error, Syntax> - Syntax error : mismatched input 'REPLACE' expecting expecting {'==', LEADING, OFF, TRAILING}

-- Line 21 --
*** DIRECTIVE INVALID SYNTAX -> REPLACE_OFF ([8,14:REPLACE]<REPLACE>[15,15: ]<SpaceSeparator>[16,18:off]<OFF>) ***
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
--- Diagnostics ---
Line 7[25,31] <27, Error, Syntax> - Syntax error : "REPLACE" Empty Comparison Pseudo Text.
Line 7[20,23] <27, Error, Syntax> - Syntax error : "REPLACE" Empty Comparison Pseudo Text.
Line 7[20,55] <27, Error, Syntax> - Error in copy 'YxxxENT' at line 1 : Syntax error : no viable alternative at input '05 ... xxxENT::-FCT01' RuleStack=codeElement>dataDescriptionEntry, OffendingSymbol=[16,29:xxxENT::-FCT01]<PartialCobolWord> in COPY YxxxENT <REPLACE[SingleToken] ? BY ?>
Line 7[20,55] <27, Error, Syntax> - Error in copy 'YxxxENT' at line 2 : Syntax error : no viable alternative at input '10 ... xxxENT::-FCT01-Var1' RuleStack=codeElement>dataDescriptionEntry, OffendingSymbol=[19,37:xxxENT::-FCT01-Var1]<PartialCobolWord> in COPY YxxxENT <REPLACE[SingleToken] ? BY ?>
Line 7[20,55] <27, Error, Syntax> - Error in copy 'YxxxENT' at line 1 : Syntax error : extraneous input '.' expecting {ProgramIdentification, ProgramEnd, ClassIdentification, ClassEnd, FactoryEnd, ObjectIdentification, ObjectEnd, MethodEnd, ProcedureDivisionHeader, WorkingStorageSectionHeader, LocalStorageSectionHeader, LinkageSectionHeader, FileDescriptionEntry, DataDescriptionEntry, DataRedefinesEntry, DataRenamesEntry, DataConditionEntry, ExecStatement, FunctionDeclarationEnd, GlobalStorageSectionHeader} OffendingSymbol=[[SentenceEnd]] [30,30+:.]<PeriodSeparator> --> [30,30+:.]<PeriodSeparator>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
Line 7[26,26] <27, Error, Syntax> - Syntax error : "LEADING" and "TRAILING" can only be used to replace one single text word. This REPLACE operation cannot be applied and is discarded.
Line 8[54,54] <27, Error, Syntax> - Syntax error : "LEADING" and "TRAILING" can only be used to replace one single text word. This REPLACE operation cannot be applied and is discarded.
Line 13[24,31] <27, Error, Syntax> - Syntax error : Missing '(' or ')' in PICTURE string
Line 16[14,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 17[14,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 20[11,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... 1'
Line 21[16,16] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 24[18,18] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 25[19,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 28[18,18] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 29[19,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 32[14,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... ('
Line 33[14,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... ('
Line 36[18,18] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... )'
Line 37[19,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... )'
Line 40[11,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... Var:1:'
Line 41[11,20] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... Var:1X:'
Line 60[15,18] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... 1'
Line 61[15,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... 1X'
Line 65[11,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... 1'
Line 66[17,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... Var'
Line 16[28,29] <27, Error, Syntax> - Syntax error : extraneous input '. ' expecting {ProgramIdentification, ProgramEnd, ClassIdentification, ClassEnd, FactoryEnd, ObjectIdentification, ObjectEnd, MethodEnd, ProcedureDivisionHeader, WorkingStorageSectionHeader, LocalStorageSectionHeader, LinkageSectionHeader, FileDescriptionEntry, DataDescriptionEntry, DataRedefinesEntry, DataRenamesEntry, DataConditionEntry, ExecStatement, FunctionDeclarationEnd, GlobalStorageSectionHeader}
--- Processed Tokens ---

IDENTIFICATION DIVISION.
PROGRAM-ID. DVZS0OSM.
data division.
working-storage section.
REPLACE LEADING ==C-Nb== BY ==1==
LEADING ==C-NbX== BY ==3==
LEADING ==(C-Nb)== BY ==5==
LEADING ==Nb== BY ==7 9==
.

*Parenthesis separator - Replace OK
01 Var1 PIC X(1) .
01 Var1 PIC X(1X) .

*Semi colon BEFORE - Word to replace at end - Replace OK
01 Var:1 pic X.
01 Var:1X pic X.

*Semi colon AFTER - Word to replace before - Replace OK
01 1 :Var pic X.
01 1X :Var pic X.

*Semi colon AFTER - Word to replace at end - Replace KO
01 VarC-Nb: pic X.
01 VarC-NbX: pic X.

*Semi colon AFTER - Word to replace before - Replace OK
01 1Var : pic X.
01 1XVar : pic X.

*Parenthesis BEFORE - Replace OK
01 Var(1 pic X.
01 Var(1X pic X.

*Parenthesis AFTER - Replace KO
01 VarC-Nb) pic X.
01 VarC-NbX) pic X.

*Semi colons AROUND - Replace OK
01 Var:1: pic X.
01 Var:1X: pic X.

*Literals - Replace KO
01 Var0 pic X(10) value ' C-Nb' .
01 Var0 pic X(10) value 'C-Nb'.

01 Var0 pic X(10) value " C-Nb" .
01 Var0 pic X(10) value " C-Nb".

*No separator - Replace OK
01 1Var PIC X.
01 1XVar PIC X.

*No separator - Replace KO
01 VarC-Nb PIC X.
01 VarC-NbX PIC X.

*Comma separator - Replace KO
*It's a known bug in our parser
01 Var 1 pic X.
01 Var 1X pic X.

*Comma separator - Replace OK
*It's a known bug in our parser
01 1 Var pic X.
01 1X Var pic X.

end program DVZS0OSM.
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. DVZS0OSM.
data division.
working-storage section.
REPLACE LEADING ==C-Nb== BY ==1==
LEADING ==C-NbX== BY ==3==
LEADING ==(C-Nb)== BY ==5==
LEADING ==Nb== BY ==7 9==
.
*Parenthesis separator - Replace OK
01 Var1 PIC X(C-Nb). *> Result = X(1)
01 Var1 PIC X(C-NbX). *> Result = X(1X)
*Semi colon BEFORE - Word to replace at end - Replace OK
01 Var:C-Nb pic X. *> Result = Var:1
01 Var:C-NbX pic X. *> Result = Var:1X
*Semi colon AFTER - Word to replace before - Replace OK
01 C-Nb:Var pic X. *> Result = 1:Var
01 C-NbX:Var pic X. *> Result = 1X:Var
*Semi colon AFTER - Word to replace at end - Replace KO
01 VarC-Nb: pic X.
01 VarC-NbX: pic X.

*Semi colon AFTER - Word to replace before - Replace OK
01 C-NbVar: pic X. *> Result = 1Var:
01 C-NbXVar: pic X. *> Result = 1XVar:
*Parenthesis BEFORE - Replace OK
01 Var(C-Nb pic X. *> Result = Var(1
01 Var(C-NbX pic X. *> Result = Var(1X
*Parenthesis AFTER - Replace KO
01 VarC-Nb) pic X.
01 VarC-NbX) pic X.
*Semi colons AROUND - Replace OK
01 Var:C-Nb: pic X. *> Result = Var:1:
01 Var:C-NbX: pic X. *> Result = Var:1X:
*Literals - Replace KO
01 Var0 pic X(10) value ' C-Nb' .
01 Var0 pic X(10) value 'C-Nb'.
01 Var0 pic X(10) value " C-Nb" .
01 Var0 pic X(10) value " C-Nb".
*No separator - Replace OK
01 C-NbVar PIC X. *> Result = 1Var
01 C-NbXVar PIC X. *> Result = 1XVar
*No separator - Replace KO
01 VarC-Nb PIC X.
01 VarC-NbX PIC X.
*Comma separator - Replace KO
*It's a known bug in our parser
01 Var,C-Nb pic X.
01 Var,C-NbX pic X.
*Comma separator - Replace OK
*It's a known bug in our parser
01 C-Nb,Var pic X. *> Result = 1,Var
01 C-NbX,Var pic X. *> Result = 1X,Var
end program DVZS0OSM.
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
Line 7[27,27] <27, Error, Syntax> - Syntax error : "LEADING" and "TRAILING" can only be used to replace one single text word. This REPLACE operation cannot be applied and is discarded.
Line 8[55,55] <27, Error, Syntax> - Syntax error : "LEADING" and "TRAILING" can only be used to replace one single text word. This REPLACE operation cannot be applied and is discarded.
Line 13[24,31] <27, Error, Syntax> - Syntax error : Missing '(' or ')' in PICTURE string
Line 16[14,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 17[14,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 20[11,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... 1'
Line 21[16,16] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 24[19,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 25[20,20] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 28[18,18] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 29[19,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... :'
Line 32[14,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... ('
Line 33[14,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... ('
Line 36[18,18] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... )'
Line 37[19,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... )'
Line 40[11,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... Var:1:'
Line 41[11,20] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... Var:X1:'
Line 60[15,18] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... 1'
Line 61[15,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... X1'
Line 65[11,14] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... 1'
Line 66[17,19] <27, Error, Syntax> - Syntax error : no viable alternative at input '01 ... Var'
Line 16[28,29] <27, Error, Syntax> - Syntax error : extraneous input '. ' expecting {ProgramIdentification, ProgramEnd, ClassIdentification, ClassEnd, FactoryEnd, ObjectIdentification, ObjectEnd, MethodEnd, ProcedureDivisionHeader, WorkingStorageSectionHeader, LocalStorageSectionHeader, LinkageSectionHeader, FileDescriptionEntry, DataDescriptionEntry, DataRedefinesEntry, DataRenamesEntry, DataConditionEntry, ExecStatement, FunctionDeclarationEnd, GlobalStorageSectionHeader}
--- Processed Tokens ---

IDENTIFICATION DIVISION.
PROGRAM-ID. DVZS0OSM.
data division.
working-storage section.
REPLACE TRAILING ==C-Nb== BY ==1==
TRAILING ==C-NbX== BY ==3==
TRAILING ==(C-Nb)== BY ==5==
TRAILING ==Nb== BY ==7 9==
.

*Parenthesis separator - Replace OK
01 Var1 PIC X(1) .
01 Var1 PIC X(X1) .

*Semi colon BEFORE - Word to replace at end - Replace OK
01 Var:1 pic X.
01 Var:X1 pic X.

*Semi colon AFTER - Word to replace before - Replace OK
01 1 :Var pic X.
01 X1 :Var pic X.

*Semi colon AFTER - Word to replace at end - Replace OK
01 Var1 : pic X.
01 VarX1 : pic X.

*Semi colon AFTER - Word to replace before - Replace KO
01 C-NbVar: pic X.
01 XC-NbVar: pic X.

*Parenthesis BEFORE - Replace OK
01 Var(1 pic X.
01 Var(X1 pic X.

*Parenthesis AFTER - Replace OK
01 Var1 ) pic X.
01 VarX1 ) pic X.

*Semi colons AROUND - Replace OK
01 Var:1: pic X.
01 Var:X1: pic X.

*Literals - Replace KO
01 Var0 pic X(10) value ' C-Nb' .
01 Var0 pic X(10) value 'C-Nb'.

01 Var0 pic X(10) value " C-Nb" .
01 Var0 pic X(10) value " C-Nb".

*No separator - Replace KO
01 C-NbVar PIC X.
01 XC-NbVar PIC X.

*No separator - Replace OK
01 Var1 PIC X.
01 VarX1 PIC X.

*Comma separator - Replace OK
*It's a known bug in our parser
01 Var 1 pic X.
01 Var X1 pic X.

*Comma separator - Replace KO
*It's a known bug in our parser
01 1 Var pic X.
01 X1 Var pic X.

end program DVZS0OSM.
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. DVZS0OSM.
data division.
working-storage section.
REPLACE TRAILING ==C-Nb== BY ==1==
TRAILING ==C-NbX== BY ==3==
TRAILING ==(C-Nb)== BY ==5==
TRAILING ==Nb== BY ==7 9==
.
*Parenthesis separator - Replace OK
01 Var1 PIC X(C-Nb). *> Result = X(1)
01 Var1 PIC X(XC-Nb). *> Result = X(X1)
*Semi colon BEFORE - Word to replace at end - Replace OK
01 Var:C-Nb pic X. *> Result = Var:1
01 Var:XC-Nb pic X. *> Result = Var:X1
*Semi colon AFTER - Word to replace before - Replace OK
01 C-Nb:Var pic X. *> Result = 1:Var
01 XC-Nb:Var pic X. *> Result = X1:Var
*Semi colon AFTER - Word to replace at end - Replace OK
01 VarC-Nb: pic X. *> Result = Var1:
01 VarXC-Nb: pic X. *> Result = VarX1:
*Semi colon AFTER - Word to replace before - Replace KO
01 C-NbVar: pic X.
01 XC-NbVar: pic X.
*Parenthesis BEFORE - Replace OK
01 Var(C-Nb pic X. *> Result = Var(1
01 Var(XC-Nb pic X. *> Result = Var(X1
*Parenthesis AFTER - Replace OK
01 VarC-Nb) pic X. *> Result = Var1)
01 VarXC-Nb) pic X. *> Result = VarX1)
*Semi colons AROUND - Replace OK
01 Var:C-Nb: pic X. *> Result = Var:1:
01 Var:XC-Nb: pic X. *> Result = Var:X1:
*Literals - Replace KO
01 Var0 pic X(10) value ' C-Nb' .
01 Var0 pic X(10) value 'C-Nb'.
01 Var0 pic X(10) value " C-Nb" .
01 Var0 pic X(10) value " C-Nb".
*No separator - Replace KO
01 C-NbVar PIC X.
01 XC-NbVar PIC X.
*No separator - Replace OK
01 VarC-Nb PIC X. *> Result = Var1
01 VarXC-Nb PIC X. *> Result = VarX1
*Comma separator - Replace OK
*It's a known bug in our parser
01 Var,C-Nb pic X. *> Result = Var,1
01 Var,XC-Nb pic X. *> Result = Var,X1
*Comma separator - Replace KO
*It's a known bug in our parser
01 C-Nb,Var pic X.
01 XC-Nb,Var pic X.
end program DVZS0OSM.

0 comments on commit be0a114

Please sign in to comment.