问题标签 [lexer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2171 浏览

parsing - 通过词汇分析确定文本短语的“情绪”

我希望将分数(正面、负面或中性)应用于短文本短语。没有解析出表情符号并根据它们的用法做出假设,我不确定还有什么可以尝试的。任何人都可以提供对这个问题进行更词汇分析的示例、研究论文、文章等。

我在想诸如副词使用、标点符号误用/重复、拼写/语法错误之类的东西都可能是作者情绪的体面指标,几乎是二元意义上的(好或坏)。

0 投票
3 回答
2334 浏览

regex - 匹配 Lua 的“长括号”字符串语法

我正在为 Lua 编写一个 jFlex 词法分析器,并且在设计正则表达式以匹配语言规范的一个特定部分时遇到问题:

文字字符串也可以使用长括号括起来的长格式来定义。我们将第 n 级的左长括号定义为一个左方括号,后跟 n 个等号,然后是另一个左方括号。因此,级别 0 的左长括号写为 [[,级别 1 的左长括号写为 [=[,依此类推。闭合长括号的定义类似;例如,第 4 级的右长括号写为]====]。长字符串以任何级别的左长括号开始,并在同一级别的第一个右长括号结束。这种括号形式的文字可以运行多行,不解释任何转义序列,并忽略任何其他级别的长括号。它们可以包含除适当级别的右括号之外的任何内容。

简而言之,我正在尝试设计一个正则表达式,它将匹配一个开始的长括号、中间的字符串内容和结束的长括号。只有当开始长括号和结束长括号具有相同数量的等号(可以是零或更多)时,才会发生匹配。

0 投票
4 回答
644 浏览

python - 如何解析标记的文本以进行进一步处理?

在 Edit-1 中查看更新的输入和输出数据。

我想要完成的是转

进入python数据结构,例如

我查看了许多不同的 wiki 标记语言、markdown、重组文本等,但它们对于我来说理解它是如何工作的都非常复杂,因为它们必须涵盖大量的标签和语法(我只需要“列表”其中大部分的一部分,但当然转换为python而不是html。)

我还研究了分词器、词法分析器和解析器,但它们比我需要的要复杂得多,而且我能理解。

我不知道从哪里开始,并希望在这个主题上提供任何帮助。谢谢

Edit-1:是的,行首的字符很重要,从之前的所需输出现在可以看出,*表示有子节点的根节点,+有子节点, -没有子节点(root 或其他) 并且只是与该节点有关的额外信息。*不重要,可以与 + 互换(可以通过其他方式获得 root 状态。)

因此,新要求将仅*用于表示有或没有子节点的节点,并且-不能有子节点。我也改变了它,所以关键不是后面的文本,*因为这无疑会在以后变成一个实际的标题。

例如

会给

或者,如果您有另一个想法来表示 Python 中的轮廓,那么请提出来。

0 投票
5 回答
12145 浏览

.net - .NET 的好的解析器生成器(想想 lex/yacc 或 antlr)?只有构建时间?

.NET 是否有一个好的解析器生成器(想想 lex/yacc 或 antlr)?任何拥有不会吓到律师的执照的人?很多 LGPL,但我正在研究嵌入式组件,一些组织对我采用 LGPL 依赖项感到不舒服。

我听说 Oslo 可能会提供此功能,但我不确定它是构建时间依赖还是运行时依赖。谁能澄清奥斯陆将提供什么?

更新
我真正想要的是一个解析器生成器,它是一个仅构建时间的依赖项。看起来 ANTLR 有一个运行时组件。

0 投票
6 回答
1390 浏览

c# - 解析器如何在 .NET 中使用

我想了解如何在 .NET 中构造解析器来处理源文件。例如,也许我可以从学习如何解析 SQL、HTML 或 CSS 开始,然后对结果采取行动,以便能够将它们格式化以提高可读性或类似的东西。

我在哪里可以学习如何做到这一点?有没有具体的书可以参考?我需要了解词法分析器/解析器吗?

专门针对 .NET 平台,因为我对 C# 很熟悉。

0 投票
2 回答
1099 浏览

javascript - Is there a simple way I can tokenize a string without a full-blown lexer?

I'm looking to implement the Shunting-yard Algorithm, but I need some help figuring out what the best way to split up a string into its tokens is.

If you notice, the first step of the algorithm is "read a token." This isn't exactly a non-trivial thing to do. Tokens can consist of numbers, operators and parens.

If you are doing something like:

(5+1)

A simple string.split() will give me an array of the tokens { "(", "5", "+", "1", ")" }.

However, it becomes more complicated if you have numbers with multiple digits such as:

((2048*124) + 42)

Now a naive string.split() won't do the trick. The multi-digit numbers are a problem.

I know I could write a lexer, but is there a way to do this without writing a full-blown lexer?

I'm implementing this in JavaScript and I'd like to avoid having to go down the lexer-path if possible. I'll be using the "*", "+", "-" and "/" operators, along with integers.

0 投票
2 回答
3065 浏览

haskell - Haskell 词法分析器问题

我正在用haskell写一个词法分析器。这是代码:

我有两个问题。一、数字正则表达式"^[0-9]*(\.[0-9]+)?"抛出这个错误:

当我注释掉包含它的行和使用它的函数部分时,我得到这个错误:

我不知道为什么会出现这些错误。有人能帮我吗?

0 投票
2 回答
1206 浏览

c++ - 在 C++ 中修改 PL/SQL 语句字符串

这是我的用例:输入是表示任意复杂度的Oracle PL/SQL 语句的字符串。我们可以假设它是单个语句(不是脚本)。现在,这个输入字符串的几个位必须被重写

例如,表名需要加上前缀,选择列表中不使用列别名的聚合函数应该被分配一个默认值:

变成

(免责声明:只是为了说明问题,声明没有意义)

由于聚合函数可能是嵌套的,而 subSELECTs 是一个 b_tch,我不敢使用正则表达式。好吧,实际上我做到了并取得了 80% 的成功,但我确实需要剩下的 20%。

我认为正确的方法是使用语法和解析器。我摆弄了 c++ ANTLR2(尽管我对语法和在这些帮助下的解析知之甚少)。我看不到获取 SQL 位的简单方法:

任何人都可以提供一些关于“解析专业人员”如何解决这个问题的指示吗?编辑:我正在使用Oracle 9i

0 投票
2 回答
808 浏览

antlr - Antlr 中是否有机制允许词法分析器仅在某些规则期间匹配令牌?

我想在我的语言中添加一个关键字。

这个关键字只需要在一个特定的解析器语法规则中匹配。

由于向后兼容性,我希望允许此关键字继续用作变量名,即它可以由确定标记是否适合变量名的词法分析器规则匹配。

只要在文件中找到新规则,Lexer 就会匹配它。

解决此问题的适当方法是否可以修改 var_declaration 规则,使其匹配 IDENT 或新的 KEYWORD 令牌?

相关规则如下:

创建变量的解析器规则是:

0 投票
3 回答
1517 浏览

python - 一个带有 PLY 的解析器的几个词法分析器?

我正在尝试使用 PLY 为用于生成 linux 内核配置选项的 Kconfig 语言实现 python 解析器。

有一个名为 source 的关键字执行包含,所以我所做的是当词法分析器遇到这个关键字时,我更改词法分析器状态以创建一个新的词法分析器,它将对源文件进行 lex:

在其他地方我有这条线

这是解析器将调用的“主”或“根”词法分析器。

我的问题是我不知道如何告诉解析器使用不同的词法分析器或告诉“source_lexer”返回一些东西......

也许应该使用克隆功能......

谢谢