我使用ANTLR版本4來創建編譯器。第一階段是Lexer部分。我創建了「CompilerLexer.g4」文件,並在其中放置了詞法分析器規則。它工作正常。分別使用ANTLR解析器和Lexer
CompilerLexer.g4:
lexer grammar CompilerLexer;
INT : 'int' ; //1
FLOAT : 'float' ; //2
BEGIN : 'begin' ; //3
END : 'end' ; //4
To : 'to' ; //5
NEXT : 'next' ; //6
REAL : 'real' ; //7
BOOLEAN : 'bool' ; //8
.
.
.
NOTEQUAL : '!=' ; //46
AND : '&&' ; //47
OR : '||' ; //48
POW : '^' ; //49
ID : [a-zA-Z]+ ; //50
WS
: ' ' -> channel(HIDDEN) //50
;
現在是時候了,第2階段這是parser.I創建 「CompilerParser.g4」 文件和推杆語法中,但有幾十個警告和錯誤。
CompilerParser.g4:
parser grammar CompilerParser;
options { tokenVocab = CompilerLexer; }
STATEMENT : EXPRESSION SEMIC
| IFSTMT
| WHILESTMT
| FORSTMT
| READSTMT SEMIC
| WRITESTMT SEMIC
| VARDEF SEMIC
| BLOCK
;
BLOCK : BEGIN STATEMENTS END
;
STATEMENTS : STATEMENT STATEMENTS*
;
EXPRESSION : ID ASSIGN EXPRESSION
| BOOLEXP
;
RELEXP : MODEXP (GT | LT | EQUAL | NOTEQUAL | LE | GE | AND | OR) RELEXP
| MODEXP
;
.
.
.
VARDEF : (ID COMA)* ID COLON VARTYPE
;
VARTYPE : INT
| FLOAT
| CHAR
| STRING
;
compileUnit
: EOF
;
警告和錯誤:
- 解析器的令牌 'BLOCK' 隱含的定義
- 令牌隱含定義「 BOOLEXP'解析器
- 解析器令牌「EXP」
- 解析器令牌「EXPLIST」的隱定義的隱含定義
- 詞法規則「BLOCK」解析器不允許
- 詞法規則「EXP」解析器
不允許- 詞法規則「EXPLIST」解析器不允許
- 詞法分析器中不允許規則「表達」
有幾十這些警告和錯誤。原因是什麼?
一般問題:使用組合語法和分別使用詞法分析器和分析器有什麼區別?如何加入單獨的語法和詞法分析器文件?
解決的主要問題。一般問題如何? – user2998131
@ user2998131啊,錯過了那些。將在稍後回答這些問題。 –
@ user2998131,檢查我的**編輯**。 –