14得票1回答
为什么要使用解析器生成器而不是可配置解析器?

标题已经概括了问题。假设使用源代码生成的解析器生成器(其将要解析的语法硬编码到程序中)所能实现的任何功能,都可以通过可配置解析器来实现(该解析器将要解析的语法以数据结构的形式保存)。 我想,硬编码的代码生成解析器将具有性能优势,因为少了一层间接引用,但是编译和运行它(或在动态语言中使用exe...

7得票3回答
如何识别带有非单词标记的文本中的单词?

我目前正在解析一堆邮件,并希望从中获取单词和其他有趣的标记(即使有拼写错误或字符和字母的组合,例如“zebra21”或“customer242”)。但是,我如何知道“0013lCnUieIquYjSuIA”和“anr5Brru2lLngOiEAVk1BTjN”不是单词,也不相关?如何提取单词并...

8得票1回答
ANTLR4:import和tokenVocab之间有什么区别?

import语句或tokenVocab选项可用于解析器语法中,以重用词法分析器语法。 Sam Harwell 建议始终使用tokenVocab而不是import [1]。 在import和tokenVocab之间有什么区别吗?如果没有区别(而Sam建议使用tokenVocab),那么为什么...

7得票1回答
在ocamllex中返回多个标记

有没有办法在OCamlLex中返回多个标记? 我正在尝试编写一个缩进语言的词法分析器和解析器,当词法分析器发现缩进级别小于之前的级别时,我想让它返回多个“DEDENT”标记。这将使它能够在多个块结束时通知解析器。 通过这种方法,我将能够使用“INDENT”和“DEDENT”作为“BEGIN...

8得票2回答
如何使用Flex实现双向扫描器?

作为一个宠物项目,我想尝试实现一种基本语言,可以用作 web 脚本语言。将 C++ 程序作为 Apache CGI 运行非常简单,因此真正的工作在于如何解析包含非代码(HTML/CSS 标记)和服务器端代码的输入文件。 在本科编译器课程中,我们使用 Flex 和 Bison 为简单语言生成扫...

21得票1回答
PEG.js中如何忽略空格

我想在我的语法中忽略空格和换行符,以便它们不会出现在PEG.js输出中。此外,方括号内的文字应该返回一个新数组。 语法 start = 'a'? sep+ ('cat'/'dog') sep* '(' sep* stmt_list sep* ')' stmt_list = exp...

16得票1回答
如何在Javascript中实现词法分析

大家好,感谢阅读。 我正在尝试做一个类似 Google 的计算器。你输入一个字符串,它会确定是否可以计算并返回结果。 我从基础开始慢慢构建:+ - / * 和括号处理。 我希望随着时间的推移改进计算器,并且在一段时间前学习了一些词法分析的知识,我构建了一个令牌列表和相关的正则表达式模式。...

12得票5回答
Python - 词法分析和标记化

我想加快我的发现过程,因为这是我第一次涉足词法分析的世界。也许这甚至是错误的路径。首先,我会描述我的问题: 我有非常大的属性文件(大约1,000个属性),精简后实际上只有15个重要属性,其余可以生成或很少更改。 例如:general { name = myname ip = 127...

7得票2回答
Prolog DCG:编写编程语言词法分析器

目前我试图将词法分析器和语法分析器分开,基于书籍《Prolog and Natural Language Analysis》的建议,该书对词法分析/标记化并没有详细说明。所以我正在尝试,并且发现几个小问题,这表明我可能遗漏了一些显而易见的东西。 所有我的小型标记解析器似乎都工作得很好;目前这...

9得票2回答
正则表达式 - 匹配空白字符

我在编写一个正则表达式来去除输入中的所有空格,但是一直遇到困难。 我尝试过 \s+ 和 [ \t\t\r]+ 但是都没有生效。 我需要这个正则表达式因为我正在使用 flex 编写一个扫描器,而且我卡在了匹配空格上。空格应该只是被匹配而不是被移除。 例如输入: program 3.3 ...