📜  用于识别和打印整数和浮点常量和标识符的 LEX 代码

📅  最后修改于: 2022-05-13 02:24:08.558000             🧑  作者: Mango

用于识别和打印整数和浮点常量和标识符的 LEX 代码

在本文中,我们将讨论如何解决该问题,您还将了解如何在 LEX 代码中设计与 DFA 相关的问题,以识别和打印整数和浮点常量和标识符。让我们一一讨论。

问题概述:
在 LEX 代码中设计一个 DFA 来识别和打印整数和浮点常量和标识符。

笔记 -
整数、浮点数和标识符的正则表达式如下。

Integer    - [0-9]+
Float      - [0-9]+[.][0-9]+
Identifier - [A-Za-z_][A-Za-z0-9_]+

例子 -

Input  : 35
Output : Integer

Input  : 3.98
Output : Float

Input  : kashyap
Output : Identifier

Input  : 123Singh
Output : Invalid

方法 :
LEX 默认为我们提供了一个初始状态。所以要制作一个DFA,使用这个初始状态作为DFA的初始状态。再定义四个状态 A、B、C 和 DEAD。 DEAD 是在遇到无效或错误输入时使用的死状态,它会打印“Invalid”。当遇到一个整数时使用 A,它打印“Integer”,当遇到一个浮动常量时使用 B,它打印“Float”,当遇到标识符时使用 C,它打印“Identifier”。字符(\n) 标记输入的结束,因此转换到 INITIAL 状态并打印输出或打印“未接受”或“无效”。

笔记:-
要编译 lex 程序,我们需要一个安装了 flex 的 Unix 系统。然后我们需要用 .l 扩展名保存文件。例如-filename.l然后保存程序后关闭 lex 文件,然后打开终端并编写以下命令。

lex filename.l
cc lex.yy.c
./a.out

方法一

LEX 代码 –

C


C


输出 :

方法二

如果您还想打印已识别的标记,则可以应用以下 Lex 代码来打印匹配的整数、浮点数和标识符。

LEX代码-

输出: