大家好!今天我要给大家介绍一个有趣的项目,名叫ToyParser。这个项目包含了一个简单的Lexer和Parser,帮助你轻松掌握Lexer和Parser的基础知识。不用担心,你不需要成为编译器专家,就可以理解这个项目。相信我,它很好玩!
现在,我们进入
ToyParser
项目的第二部分:一个更加复杂的
Lexer
和
Parser
。这个
Lexer
和
Parser
是专门用来处理具有多种标记的语言的。比如,关键字、特殊符号、标识符、类型和操作符等。语言的语法也更加复杂,但相信我,你仍然可以轻松掌握。只需要一些耐心和好奇心!
下面是对这个语言的描述
有效的token
-
keyword: return
-
special token: ; | ( | ) | { | } | ,
-
identifier: f | a | b;
-
type: int | float
-
operator: + | -
这个项目重点是放在Parser,所以我们的lexer相当简单。
-
i 开头的只能是 int
-
f 开头的可以是identifier, 或者
float
-
a, b 开头的只能是identifer,且只有一个字母
欢迎大家帮我实现完整功能的lexer,我其实已经实现了一个完善的lexer,但是要当作业,所以我就不发出来了。
唯一有效的grammar:
S -> T ID ( P ) { B }
T -> int | float
P -> T ID | T ID , P
B -> return E ;
E -> ID | ID + E | ID - E
ID -> f | a | b
有效程序举例