ANTLR4:输入错误时没有可行的替代方案
我正在使用一个精简版的pascal语法来创建一个将pascal转换为javascript的编译器,但是我一直遇到这个错误ANTLR4:输入错误时没有可行的替代方案,antlr,pascal,antlr4,Antlr,Pascal,Antlr4,我正在使用一个精简版的pascal语法来创建一个将pascal转换为javascript的编译器,但是我一直遇到这个错误 line 3:4 no viable alternative at input 'PROCEDURE' line 3:38 extraneous input ':' expecting {'END', ';'} line 5:4 no viable alternative at input 'VAR' 以下是我语法的相关部分: grammar pascal; progra
line 3:4 no viable alternative at input 'PROCEDURE'
line 3:38 extraneous input ':' expecting {'END', ';'}
line 5:4 no viable alternative at input 'VAR'
以下是我语法的相关部分:
grammar pascal;
program
: programHeading ('INTERFACE')?
block
DOT
;
programHeading
: 'PROGRAM' identifier (LPAREN identifierList RPAREN)? SEMI
| 'UNIT' identifier SEMI
;
identifier
: IDENT
;
block
: ( labelDeclarationPart
| constantDefinitionPart
| typeDefinitionPart
| variableDeclarationPart
| procedureAndFunctionDeclarationPart
| usesUnitsPart
| 'IMPLEMENTATION'
)*
| compoundStatement
;
procedureAndFunctionDeclarationPart
: procedureOrFunctionDeclaration SEMI
;
procedureOrFunctionDeclaration
: procedureDeclaration
| functionDeclaration
;
procedureDeclaration
: 'PROCEDURE' identifier (formalParameterList)? SEMI
( block | directive )
;
functionDeclaration
: 'FUNCTION' identifier (formalParameterList)? COLON resultType SEMI
( block | directive )
;
compoundStatement
: 'BEGIN'
statements
'END'
;
statements
: statement ( SEMI statement )*
;
statement
: label COLON unlabelledStatement
| unlabelledStatement
;
我正在使用antlr-4.5-complete,希望有人能对此有所了解
这是我试图编译的程序:
PROGRAM Lesson1_PROGRAM3;
BEGIN
PROCEDURE DrawLine(X : Integer; Y : Integer);
VAR
Num1, Num2, Sum : Integer;
BEGIN
Write('Input number 1:');
Readln(Num1);
Writeln('Input number 2:');
Readln(Num2);
Sum := Num1 + Num2;
Writeln(Sum);
Readln;
IF Sel = '1' THEN
BEGIN
Total := N1 + N2;
Write('Press any key TO continue...');
Readkey;
GOTO 1;
END;
FOR Counter := 1 TO 7 DO
writeln('for loop');
Readln;
END;
END.
第二行的开始是一个复合语句。因此,该过程是语句规则的开始。您的语句规则在语法中不存在,但我认为您不会返回到从语句声明的过程。是否从有效的pascal程序开始测试?这个不是。@MarcovandeVoort你能告诉我这个程序有什么问题吗?有人给了我,告诉我valid@Mephy好的,我添加了语句规则,你能详细说明一下吗?@Antlr语法仍然不完整,但错误似乎是BEGIN过程不是语法描述的语言中的有效字符串。尝试找到一种手动派生它的方法,您将看到。