Skip to content

Commit b202f38

Browse files
authored
WI #2434 #2441 Check builder state before attempting to close current statement (#2450)
1 parent f86b5f1 commit b202f38

File tree

4 files changed

+173
-102
lines changed

4 files changed

+173
-102
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Line 14[21,24] <27, Error, Syntax> - Syntax error : extraneous input 'TODO' expecting {separator, numeric literal, character string, symbol, statement starting keyword, keyword, Formalized Comments elements, Sql statement starting keyword}
2+
Line 15[26,26] <27, Error, Syntax> - Syntax error : no viable alternative at input 'TODO ... :'
3+
Line 16[12,22] <27, Error, Syntax> - Syntax error : extraneous input 'end-perform' expecting {ProgramIdentification, ProgramEnd, ClassIdentification, MethodEnd, DeclarativesEnd, SectionHeader, ParagraphHeader, SentenceEnd, AcceptStatement, AddStatement, AllocateStatement, AlterStatement, CallStatement, CancelStatement, CloseStatement, ComputeStatement, ContinueStatement, DeleteStatement, DisplayStatement, DivideStatement, EntryStatement, EvaluateStatement, ExecStatement, ExitMethodStatement, ExitProgramStatement, ExitStatement, FreeStatement, GobackStatement, GotoStatement, IfStatement, InitializeStatement, InspectStatement, InvokeStatement, JsonGenerateStatement, JsonParseStatement, MergeStatement, MoveStatement, MultiplyStatement, OpenStatement, PerformProcedureStatement, PerformStatement, ReadStatement, ReleaseStatement, ReturnStatement, RewriteStatement, SearchStatement, SetStatement, SortStatement, StartStatement, StopStatement, StringStatement, SubtractStatement, UnstringStatement, WriteStatement, XmlGenerateStatement, XmlParseStatement, FunctionDeclarationHeader, FunctionDeclarationEnd, ProcedureStyleCall}
4+
--- Nodes ---
5+
?
6+
MyPGM
7+
data-division
8+
working-storage
9+
MyArray
10+
TAB-EXC-ELE
11+
TAB-EXC-IDX
12+
TAB-EXC-CLE
13+
procedure-division
14+
sentence-0
15+
[[PerformStatement]] [12,18:perform]<PERFORM> --> [42,43:50]<IntegerLiteral>{50}
16+
17+
end
18+
end
19+
end
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
IDENTIFICATION division.
2+
PROGRAM-ID. MyPGM.
3+
data division.
4+
working-storage section.
5+
01 MyArray.
6+
05 TAB-EXC-ELE occurs 1 to 50
7+
indexed by TAB-EXC-IDX.
8+
10 TAB-EXC-CLE pic X(08).
9+
10+
procedure division.
11+
perform varying TAB-EXC-IDX from 1 by 1
12+
until TAB-EXC-IDX > 50
13+
14+
TODO : case1.
15+
TODO : case2.
16+
end-perform
17+
.
18+
end program MyPGM.

TypeCobol/Compiler/CupParser/NodeBuilder/CupParserTypeCobolProgramDiagnosticErrorReporter.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using TypeCobol.Compiler.CodeElements;
55
using TypeCobol.Compiler.CupCommon;
66
using TypeCobol.Compiler.Diagnostics;
7+
using TypeCobol.Compiler.Nodes;
78

89
namespace TypeCobol.Compiler.CupParser.NodeBuilder
910
{
@@ -112,10 +113,10 @@ public bool SyntaxError(lr_parser parser, Symbol curToken)
112113
}
113114
}
114115

115-
// Try to close current statement if current token is an END-Statement
116-
if (ce is CodeElementEnd codeElementEnd)
116+
// Try to close current statement if current token is a matching END-Statement
117+
if (((ProgramClassBuilder)tcpParser.Builder).CurrentNode is StatementWithBody currentStatement && ce?.Type == currentStatement.EndType)
117118
{
118-
lr_parser stmtParser = CloneParser(parser, TypeCobolProgramSymbols.StatementClosingPoint, codeElementEnd, true);
119+
lr_parser stmtParser = CloneParser(parser, TypeCobolProgramSymbols.StatementClosingPoint, ce, true);
119120
stmtParser.parse();
120121
}
121122

0 commit comments

Comments
 (0)