저는 grammar을 사용하여 COBOL 파서를 생성하고 있습니다.javacc + PMD를 사용하는 COBOL 파서
필자는 javacc를 사용하여 파서를 생성하고 Java Tree Builder를 사용하여이 문법에서 AST를 생성했습니다.
PMD이라는 Eclipse 플러그인을 사용자 정의하여 COBOL 파일을 읽고 AST를 생성합니다. 소스 코드에서 AST를 채울 수있는 Designer라는 UI가 있습니다.
나는 소스 코드의 울부 짖는 소리를 사용하려고하면, 나는 오류 메시지가:
오류 메시지가
net.sourceforge.pmd.PMDException: Error while processing [no filename].cbl
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:80)
at net.sourceforge.pmd.util.designer.Designer$DFAListener.actionPerformed(Designer.java:502)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: net.sourceforge.pmd.lang.ast.ParseException: net.sourceforge.pmd.lang.cpd.cobol.ast.ParseException: Encountered "" at line 0, column 0.
Was expecting one of:
at net.sourceforge.pmd.lang.cobol.CobolParser.parse(CobolParser.java:35)
at net.sourceforge.pmd.SourceCodeProcessor.parse(SourceCodeProcessor.java:90)
at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:136)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:75)
... 37 more
Caused by: net.sourceforge.pmd.lang.cpd.cobol.ast.ParseException: Encountered "" at line 0, column 0.
Was expecting one of:
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.generateParseException(CobolParser.java:43571)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.jj_consume_token(CobolParser.java:43405)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.IdentificationDivision(CobolParser.java:3734)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.ProgramUnit(CobolParser.java:3527)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.CompilationUnit(CobolParser.java:3450)
at net.sourceforge.pmd.lang.cobol.CobolParser.parse(CobolParser.java:33)
... 40 more
Exception in thread "AWT-EventQueue-0" net.sourceforge.pmd.lang.ast.ParseException: net.sourceforge.pmd.lang.cpd.cobol.ast.ParseException: Encountered "" at line 0, column 0.
Was expecting one of:
at net.sourceforge.pmd.lang.cobol.CobolParser.parse(CobolParser.java:35)
at net.sourceforge.pmd.util.designer.Designer.getCompilationUnit(Designer.java:135)
at net.sourceforge.pmd.util.designer.Designer.access$1(Designer.java:132)
at net.sourceforge.pmd.util.designer.Designer$ShowListener.actionPerformed(Designer.java:475)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: net.sourceforge.pmd.lang.cpd.cobol.ast.ParseException: Encountered "" at line 0, column 0.
Was expecting one of:
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.generateParseException(CobolParser.java:43571)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.jj_consume_token(CobolParser.java:43405)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.IdentificationDivision(CobolParser.java:3734)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.ProgramUnit(CobolParser.java:3527)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.CompilationUnit(CobolParser.java:3450)
at net.sourceforge.pmd.lang.cobol.CobolParser.parse(CobolParser.java:33)
... 39 more
net.sourceforge.pmd.PMDException: Error while processing [no filename].cbl
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:80)
at net.sourceforge.pmd.util.designer.Designer$DFAListener.actionPerformed(Designer.java:502)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: net.sourceforge.pmd.lang.ast.ParseException: net.sourceforge.pmd.lang.cpd.cobol.ast.ParseException: Encountered " "*" "* "" at line 2, column 7.
Was expecting:
"program-id" ...
at net.sourceforge.pmd.lang.cobol.CobolParser.parse(CobolParser.java:35)
at net.sourceforge.pmd.SourceCodeProcessor.parse(SourceCodeProcessor.java:90)
at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:136)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:75)
... 37 more
Caused by: net.sourceforge.pmd.lang.cpd.cobol.ast.ParseException: Encountered " "*" "* "" at line 2, column 7.
Was expecting:
"program-id" ...
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.generateParseException(CobolParser.java:43571)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.jj_consume_token(CobolParser.java:43405)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.ProgramIdParagraph(CobolParser.java:3925)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.IdentificationDivision(CobolParser.java:3741)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.ProgramUnit(CobolParser.java:3527)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.CompilationUnit(CobolParser.java:3450)
at net.sourceforge.pmd.lang.cobol.CobolParser.parse(CobolParser.java:33)
... 40 more
Exception in thread "AWT-EventQueue-0" net.sourceforge.pmd.lang.ast.ParseException: net.sourceforge.pmd.lang.cpd.cobol.ast.ParseException: Encountered " "*" "* "" at line 2, column 7.
Was expecting:
"program-id" ...
at net.sourceforge.pmd.lang.cobol.CobolParser.parse(CobolParser.java:35)
at net.sourceforge.pmd.util.designer.Designer.getCompilationUnit(Designer.java:135)
at net.sourceforge.pmd.util.designer.Designer.access$1(Designer.java:132)
at net.sourceforge.pmd.util.designer.Designer$ShowListener.actionPerformed(Designer.java:475)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: net.sourceforge.pmd.lang.cpd.cobol.ast.ParseException: Encountered " "*" "* "" at line 2, column 7.
Was expecting:
"program-id" ...
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.generateParseException(CobolParser.java:43571)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.jj_consume_token(CobolParser.java:43405)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.ProgramIdParagraph(CobolParser.java:3925)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.IdentificationDivision(CobolParser.java:3741)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.ProgramUnit(CobolParser.java:3527)
at net.sourceforge.pmd.lang.cpd.cobol.ast.CobolParser.CompilationUnit(CobolParser.java:3450)
at net.sourceforge.pmd.lang.cobol.CobolParser.parse(CobolParser.java:33)
... 39 more
COBOL 코드
IDENTIFICATION DIVISION.
*
PROGRAM-ID. GETNUMT.
*
DATE-WRITTEN. 04/04/90.
*
* MODIFIED 10/18/97.
*
* *******************************
* * *
* * Judson D. McClendon *
* * Sun Valley Systems *
* * 329 37th Court N.E. *
* * Birmingham, AL 35215 *
* * 205-853-8440 *
* * *
* *******************************
*
ENVIRONMENT DIVISION.
*
CONFIGURATION SECTION.
*
INPUT-OUTPUT SECTION.
*
FILE-CONTROL.
*
I-O-CONTROL.
*
DATA DIVISION.
*
FILE SECTION.
*
*
WORKING-STORAGE SECTION.
*
77 WS-ESCAPE-FLAG PIC 9(01) COMP VALUE 0.
77 WS-ERR-MSG PIC X(30) VALUE SPACES.
*
COPY GETNUMW.COB.
*
SCREEN SECTION.
*
*
* I N P U T S C R E E N
*
01 INPUT-SCREEN
FOREGROUND-COLOR 7
BACKGROUND-COLOR 0.
03 BLANK SCREEN
LINE 01 COLUMN 31 VALUE "G E T N U M B E R".
*
03 LINE 03 COLUMN 01 VALUE "Enter Number: ".
03 PIC X(25) USING NW-WORK-NBR.
*
*
* O U T P U T S C R E E N
*
01 OUTPUT-SCREEN
FOREGROUND-COLOR 7
BACKGROUND-COLOR 0.
*
03 LINE 05 COLUMN 01 VALUE " Result: ".
03 PIC -(13).9(06) FROM NW-EXTRACTED-NBR.
03 COLUMN 41
PIC X(30) FROM WS-ERR-MSG.
/
PROCEDURE DIVISION.
*
*
* C O N T R O L S E C T I O N
*
000000-CONTROL.
*
MOVE SPACES TO NW-WORK-NBR.
DISPLAY INPUT-SCREEN.
*
PERFORM 000100-PROCESS
THRU 000100-EXIT
UNTIL (WS-ESCAPE-FLAG = 1).
*
000000-EXIT.
STOP RUN.
*
* P R O C E S S
*
000100-PROCESS.
*
ACCEPT INPUT-SCREEN
ON ESCAPE
MOVE 1 TO WS-ESCAPE-FLAG
GO TO 000100-EXIT.
*
PERFORM 003000-GET-NBR
THRU 003000-EXIT.
*
IF (NW-NBR-ERROR-FLAG = 1)
MOVE "NUMBER INVALID" TO WS-ERR-MSG
ELSE
MOVE SPACES TO WS-ERR-MSG.
*
DISPLAY OUTPUT-SCREEN.
*
000100-EXIT.
EXIT.
*
COPY GETNUMP.COB.
나는 COBOL 아니다 프로그래머와 그 때문에, 나는이 문법에서 잘못된 점을 이해하지 못했다.
어느 한 나를 도와 드릴까요?
AST가 있는지 확인하기 위해 주석을 제거하려고 시도 할 것이다. 채우는. 텍사스 –