Đang học lex trong quá trình này, tôi đang tạo mã thông báo cho ngôn ngữ C và đang cố gắng nhận ra các nhận xét dòng đơn "//", nhưng có xung đột với toán tử phân chiaKhông thể nhận ra các nhận xét dòng đơn trong Lex
[1-9][0-9]*|0x[0-9a-fA-F][0-9a-fA-F]* return NUMBER;
[a-zA-Z][a-zA-Z0-9]* return IDENT;
/ {return DIVIDE;}
[ \t\r\n]
[//]
Nhưng khi chạy ví dụ và nhập // nó nhận ra chúng là 2 toán tử phân chia. Tôi nên sửa đổi mã ở đâu. Bất kỳ đề xuất.
Edit:
Lex Code:
%{
#include "y.tab.h"
%}
%array
%%
if {return IF;}
while {return WHILE;}
else {return ELSE;}
int {return INT;}
return {return RETURN;}
\/\/[^\r\n]*
[1-9][0-9]*|0x[0-9a-fA-F][0-9a-fA-F]* return NUMBER;
[a-zA-Z][a-zA-Z0-9]* return IDENT;
[+] {return ADD;}
[-] {return SUB;}
[<] {return LESS;}
[>] {return GREAT;}
[*] {return MULT;}
[/] {return DIVIDE;}
[;] {return SEMICOLON;}
\{ return LBRACE;
\} return RBRACE;
[ \t\r\n]
\( return LPAREN;
\) return RPAREN;
. return BADCHAR;
%%
Sau đây là tệp tiêu đề tôi sử dụng
typedef enum {END=0, WHILE, IF, ELSE,RETURN, IDENT, LPAREN, RPAREN,INT,LBRACE,RBRACE, SEMICOLON, EQUALITY, DIVIDE, MULT, LESS, GREAT,
ADD, SUB, NUMBER,BADCHAR} Token;
Sau đây là các đầu vào đang chạy,
//
/
p
Token 16, text/
Token 16, text/
Token 16, text/
Token 5, text p
Khi nào thì runni ng nó, bình luận được tiêu thụ và thậm chí các nhà điều hành phân chia được bỏ qua. Nhưng hãy kiểm tra khi đang nhập p, nó phân loại các toán tử được liệt kê ở trên, mà nó không nên làm.
Note: Am trying to ignore tabs, newline characters and single line comments.
Note 2: \/\/[^\r\n]* I have understood where I committed the mistake and wanted to share this.
trả lời cho câu hỏi của bạn: http: // stackoverflow.com/questions/15423658/regular-expression-cho-single-line-comments –