词法分析器的工作就是解析数字和字符串吗?

2024-01-07

解析数字和字符串是词法分析器的工作吗?

这可能听起来很愚蠢,也可能不愚蠢,因为我问的是lexer should parse输入。但是,我不确定这实际上是词法分析器的工作还是解析器的工作,因为为了正确地进行词法分析,词法分析器需要首先解析字符串/数字,因此如果解析器执行此操作,代码似乎会重复。

这确实是词法分析器的工作吗?或者词法分析器应该简单地分解一个字符串,比如123.456进入弦乐123, ., 456然后让解析器找出剩下的部分?对于字符串来说,这样做不会那么简单......


简单的答案是“是”。

简而言之,您根本不需要词法分析器。您可以简单地编写一个使用单个字符作为标记的语法(事实上,这正是 SGLR 解析器所做的,但这是另一天的故事)。

您需要词法分析器,因为使用字符作为原始元素构建的解析器不如将输入流分解为“标记”的解析器那么高效,其中标记是您正在解析的语言的原始元素(空格、关键字、标识符、数字、运算符) 、字符串、注释……)。 [如果您不关心效率,您可以跳过本答案的其余部分并阅读有关 SGLR 解析器的内容]。

好的词法分析器通常采用表示语言元素的正则表达式集,并将它们编译成高效的有限状态机,该状态机可以快速将输入流分段为此类语言元素。 (如果您不想使用词法分析器生成器,对于简单语言,您可以自己编写 FSA 代码)。这样编译的 FSA 对于每个输入字符仅执行几十条机器指令(从输入缓冲区获取字符,将字符切换到新状态,确定令牌是否完整,如果不完整则再次执行),因此速度非常快。

此类词法分析器的输出通常是表示 langauge 元素的代码(或者如果解析器无论如何都会忽略空格,则没有空格)和一些位置信息(从文件 foo 第 17 行第 3 列开始)以启用错误报告。

人们可以到此为止并拥有有用的词法分析器。执行转换步骤通常很有用,将字符串转换为该令牌的等效本机值,无论是在收集字符时还是在令牌完成时,因为人们仍然了解其中涉及的特定字符。令牌。这用于将目标语言中的数字(不同基数)转换为其本机二进制等效项,将包含转义序列的文字字符串转换为构成字符串的实际字符,甚至获取标识符名称并在哈希表中查找它们以便轻松确定相同的标识符。解析器通常对这些转换后的值不感兴趣,但解析之外的步骤(语义分析、检查优化、代码生成)无论如何都需要转换后的值,因此您最好在发现它们时对其进行转换。 (您可以延迟此转换,直到需要它们的二进制值为止,但实际上您几乎总是需要该值,因此延迟转换并没有多大意义)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

词法分析器的工作就是解析数字和字符串吗? 的相关文章

  • iOS 解析如何通过 URL 下载文件

    我正在将 parse 用于我的聊天应用程序 当我上传文件时 我保留该 url 并将该 url 发送给其他用户 然后其他用户可以通过该 URL 下载文件 这是我上传文件的代码 void uploadBlob NSData blob fileN
  • python 3 argparse 调用函数

    我想在 python3 中创建一个类似命令行 类似 shell 的界面 Argparse 似乎负责解析和显示帮助 错误消息 根据argparse 的 python3 文档 https docs python org 3 5 library
  • 用于(联合国)结构化文本文档的词法分析器/解析器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有很多脚本解析器和词法分析器 即结构化计算机语言 但我正在寻找一个可以将 几乎 非结构化文本文档分成更
  • 使用多个可选模式时顺序的重要性

    可选模式的顺序如何DateTimeFormatter影响解析操作吗 我正在运行这个程序 想知道为什么最后一行抛出异常而不是前三行 public static void main String args String p1 EEEE E dd
  • 在 JAVA 中使用 SAX 解析器从 XML 文件中提取文本节点

    因此 我目前正在使用 SAX 尝试从我正在处理的大量 xml 文档中提取一些信息 到目前为止 提取属性值确实很容易 但是 我不知道如何从文本节点中提取实际值 例如 在给定的 XML 文档中
  • Rust 编程竞赛中最快的惯用 I/O 例程?

    我的问题已部分得到解答 因此我根据从评论和其他实验中学到的知识对其进行了修改 总之 我想要一个用于编程竞赛的快速 I O 例程 其中使用单个文件解决问题 无需外部包 它应该从一个以空格分隔的标记序列中读取BufRead 标准输入或文件 标记
  • C 的二进制流解析库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您能推荐一个经过验证的 C 二进制流解析库吗 如果它能像 C 语言所允许的那样具有声明性 那就太好了
  • Python 中使用 Pygments 的分词器

    想要在 Python 中为源文件 例如 Java 或 C 创建标记器 遇到了Pygments http pygments org 特别是这些lexers http pygments org docs lexers lexers for c
  • _实际_ Twitter 主题标签格式?不是你的正则表达式,也不是他的代码——真正的代码?

    更新 如果可以的话 请使用 Twitter 的实体 他们为您以及其他项目找到了解决方案 我的情况是 我只有没有实体的推文和所有额外的元数据 我花了我认为不合理的时间试图找到actual主题标签的格式 据我搜索得知 Twitter 尚未发布任
  • Python3.0 - 标记化和取消标记化

    我正在使用类似于以下简化脚本的内容来解析较大文件中的 python 片段 import io import tokenize src foo bar src bytes src encode src io BytesIO src src l
  • 在Python中解析.xsd

    我需要在 Python 中解析文件 xsd 就像解析 XML 一样 我正在使用 libxml2 我必须解析如下所示的 xsd
  • 用 C/C++ 编写的通用代码补全框架

    有没有用 C C C 11 编写的框架用于编写代码补全工具 或者也许有一些库允许 Java 或 C 的代码完成 也是用 C 编写的 我正在用 C 编写我的自定义 IDE 用于 Java 而不仅仅是 Java 开发 我想以最好的方式为其添加代
  • 使用 python 将 bibtex 文件转换为 html (也许是 pybtex?)

    您好 我想解析 bibtex 出版物文件并对特定字段 例如年份 进行排序并过滤某些内容 然后将其放在网站上 我遇到了 pybtex 它可以读取和解析 bibtex 文件 但它基本上没有记录 我不知道如何对条目进行排序 pybtex 是可行的
  • 在Python中比较字符串的最快方法

    我正在用 Python 编写一个脚本 该脚本将允许用户输入一个字符串 该字符串将是指示脚本执行特定操作的命令 为了便于讨论 我会说我的命令列表是 lock read write request log 现在 我希望用户能够输入 log 一词
  • 我可以使用 javascript 生成 JSON 文件吗?

    我想在域 example1 com 上创建一个页面 并获取 解析另一个域 example2 com json json 上的 JSON 文件 可以使用 javascript 生成 json 文件 在 example2 com 上 吗 我认为
  • 使用 OpenNLP 获取句子的解析树。陷入困境。

    OpenNLP 是一个关于自然语言处理的 Apache 项目 NLP 程序的目标之一是解析一个句子 并给出其语法结构的树 例如 天空是蓝色的 这句话 可能会被解析为 S NP VP The sky is blue where S是句子 NP
  • Java 语言有 Java 解析器吗?

    我正在寻找一个 java 库 它允许我解析 java 源文件 并为我提供代码的 AST 表示 实际上我只对类和方法定义及其注释感兴趣 我不需要方法代码的 AST 我正在使用这些信息来生成代码 这就是为什么我无法先编译源文件以从生成的类文件中
  • 如何从 CSS 选择器中提取类名?

    故事 我目前正在构建一个 ESLint 规则 以警告在 CSS 选择器定位器中使用引导布局导向和角度技术类 目前我在字符串方法中使用简单的子字符串 for var i 0 i lt prohibitedClasses length i if
  • Objective-C 头解析

    我需要解析一些 Objective C 标头 我尝试过使用Doxygen并解析 XML 输出 但它不完全支持没有注释的 Objective C 标头 它会阻塞属性中定义的宏 请检查Doxygen 无法正确识别属性 https stackov
  • Rebol / Red Parse html规则返回true但没有插入任何内容

    我有一个返回 true 的解析规则 但它没有按预期插入我的文本 html 未更改 而它应该插入到主结束 div 的末尾 我尝试使用类似的计数器如何使用 REBOL 解析 HTML 标签内部 https stackoverflow com q

随机推荐