c - 词法分析器: how to identify the end of a token

标签 c token lexical-analysis automata

我需要一个函数来识别 token 的结尾,以便我可以在其中保存一个数组并将其发送到我的自动机进行识别(运算符、关键字、标识符)

当我只输入 1 个 token 时,自动机工作得很好,但是当有“很多 token (包括空格)时,它不起作用,我需要这个函数来删除空格并在每个 token 末尾停止并发送每个 token ”在我的自动机函数的数组中,我被卡住了..

我正在使用C

例如:ABC + D

: ABC 代币 1

: + token 2

:D代币3

ex2: ABC++D12*/z (ABC,+,+,D12,*,/,z) 7 个标记 ex3: AD++ - C (AD,+,+,-,C) 5 个标记

编辑:我没有使用任何工具,仅使用带有确定性有限自动机的c

最佳答案

假设注释在之前的传递中被删除。

现在您可以输入空格、字母、数字或标点符号。

空格要么不是标记,要么是解析器忽略的虚拟/空标记。

字母必须是标识符的一部分。它由一个字母(或下划线,小曲线球)后跟零个或多个字母或数字组成。空格或下划线以外的标点符号终止该标记。

数字必须是数字的一部分。规则有点复杂,前面的 0 表示八进制(已过时),前面的 0x 表示十六进制,1-9 表示十进制。允许使用后缀和科学记数法。但任意[标点符号或空格终止数字。

对于一元 -、++、<=、+= 和其他复合词,没有什么复杂的规则。但这些代币没有附加值。++ 始终是++。

字符串是下一个大问题,因为引号可以转义。

但仅此而已。为 C 源代码手动构建词法分析器并不难。

(请参阅 MiniBasic 了解如何为简单语言编写简单但功能齐全的递归下降解析器。 https://sourceforge.net/projects/minibasic/files/?source=navbar )

关于c - 词法分析器: how to identify the end of a token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41389263/

相关文章:

c - 如何在C中查找字符数组中出现的次数?

python - Microsoft 合作伙伴生成 token

c - 为什么 Flex 程序会永远等待并且不打印任何内容?

java - 什么是控制字符的正则表达式?

c# - ANTLR:我可以让 ',' 成为一个上下文中的一个标记,而另一个在所述上下文之外吗?

c - C 中的 fscanf 动态数组?

c - 为什么buf的大小从4变成了1

node.js - 在 Node Js 中处理基于 token 的授权

c - 在内核中逐行读取配置文件

python - 访问列表内的元素,由变量 Python 给出