问题标签 [lexical]

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 投票
1 回答
911 浏览

parsing - 脚本语言的词法分析

我正在尝试为资源 API 创建一个简单的脚本。我有一个资源API,主要以结构化的方式创建游戏资源。我想要的是处理这个 API,而不是每次我想要一个资源时都创建 c++ 程序。所以我们(我和我来自 uni 的导师)决定创建一个简单的脚本来创建/编辑资源文件,而无需每次都编译。还有一些其他不相关的因素,我需要命令行界面而不是 GUI 程序。

无论如何,这是脚本示例:

这种脚本语言不是我设计的,API 的所有者设计的。'.' 之前的部分 你可以猜到'.'之后的路径和部分。是实际命令和一些选项、标志等。作为第一步,我尝试创建左侧部分的语法,因为我认为我可以在搜索有关词法分析器和解析器的信息时使用它。问题是我在解析和编程语言方面缺乏经验,我不确定它是否正确。这是左侧的更多示例和语法。

如果这个语法可能是一团糟,我不知道。有 5 种不同的可能性,它们是:

它必须以'/'符号开头,如果它是唯一的符号,我会接受它作为根。

现在我的问题是如何在词法上分析这个脚本?有什么特别的方法吗?我的词法分析器应该做什么和不应该做什么(我读过一些词法分析器也做了句法分析)。您认为语法等在技术上是否合适?我应该使用哪种解析方法(递归下降、LL 等)?我正在努力使它在技术上适合工作。它不是商业的,所以我有时间,因此我可以更好地学习词法分析和解析。我不想使用解析器库。

0 投票
6 回答
60366 浏览

java - 制作词法分析器

我现在正在使用词法分析器程序,并且正在使用 Java。我一直在研究这个问题的答案,但直到现在我还没有找到任何答案。这是我的问题:

输入:

期望的输出:

我还是一个初学者,所以我希望你们能帮助我。谢谢。

0 投票
1 回答
135 浏览

c - 构建扫描仪。识别代币

作为创建扫描器的一部分,我需要执行标记化。

我想将整数和实数扫描为两种不同的标记。例如,如果我有一个令牌 1.0 。

我如何将其分类为整数或实数。

0 投票
3 回答
1508 浏览

c - C 词法分析器。使用开关分析和计算小数/非小数

我的词法分析器可以识别数字 (5,555,543667)、小数 (44.65,4.1) 和句点 (.)。

我可以很好地计算数字、小数和句点,但是当我遇到一个数字和句点彼此相邻时,它会将其计为小数。

考虑一个包含以下内容的文本文件:555 2.3 55.23 44 5。

我的输出是

1 型 1:555
2 型 3:2.3
3 型 3:55.23
4 型1:44
5 型 3:5。

其中类型 3 是我的小数标识符。

我希望将第 5 个和第 6 个令牌计为一个数字,然后是一个句点。

这是我处理我的 switch 语句的方式。

尝试了多种方法,但我被正式卡住了。

0 投票
1 回答
1731 浏览

parsing - 在 JavaCC 中推送/弹出词法状态

我正在尝试重构一个几乎只使用一种词法状态编写的 JavaCC DSL 解析器。

我的目标是引入一个上下文敏感的新关键字,不会使使用旧 DSL 的旧配置无效。

这个想法是改变词法状态并引入 new 关键字,因此它仅在非常特定的上下文中有效。与早期版本向后兼容。

问题:评论已经改变了词法状态,在评论结束后变回 DEFAULT。改回 DEFAULT 是“硬编码的”,但现在我需要 Comments 来改回最后一个活动的词法状态。

据我了解,将状态保存在堆栈中,推送和弹出它们将帮助我实现这一点(认为这称为 DPDA)。这在 JavaCC 中可能吗?

[编辑,在搜索了更多之后,这就是我得到的:]

似乎在做我想做的事,但它是正确的吗?(在这里考虑前瞻)

0 投票
1 回答
1259 浏览

flex-lexer - Flex 在默认规则匹配时将换行符打印到标准输出 - 想要改变这种行为

我有以下弹性规则。

它非常适合我的目的,并在与第一条规则匹配时输出;

困扰我的是 flex 还在第二条规则的每个匹配项上打印一个换行符。所以我得到一个充满换行符的标准输出。C中是否有无所事事的OP?我是否隐含地告诉 flex 打印带有空规则操作的换行符?省略“{}”会导致相同的行为。我可以使用 sed 或其他任何东西来过滤掉换行符,但我宁愿告诉 flex 停止打印换行符。

我很乐意提供后续示例和数据。

0 投票
1 回答
201 浏览

pascal - 词法错误,这种情况两个连续的符号算作词法错误吗?

我在互联网上查看了 Pascal 编程语言的词法错误,但仍然存在这种情况,我不知道它是词法错误还是语义。

case 两个符号(运算符)在一个之后是否算作词汇错误或语义错误?

例如:"+-", "<>", ";;"或类似的东西。

提前致谢。

0 投票
5 回答
335 浏览

perl - 用于传递函数参数的 Perl 自定义语法

我已经使用 perl 有一段时间了。我想知道如何在 perl 中运行以下操作:

要得到结果:

我想我得看看 Perl 的自定义解析技术。这就是我现在正在查看的内容:

开发::声明

开发::CallParser

http://www.perl.com/pub/2012/10/an-overview-of-lexing-and-parsing.html

现在,我不确定要寻找什么或做什么。任何有关如何解决此问题的帮助,阅读内容将不胜感激。请清楚。谢谢你。

0 投票
1 回答
62 浏览

context-free-grammar - 区分上下文无关文法中的有符号数和运算

我正在编写一个词法扫描器,我想知道如何区分操作(例如-)和有符号数(例如-14)。例如,以下两行都有效:

目前,我的词法扫描器会像这样解析它们:

+12
12 +12

但是,稍后在程序中检查第二条语句的有效性时,它被标记为无效:一个数字标记不能跟在另一个没有相邻运算符的情况下。我希望它们被扫描为:

+12
12 + 12

我可以通过简单地检查前面的字符是否是运算符来实现这一点,如果是,则生成一个带符号的数字标记,否则一个运算符后跟一个数字,但是这样做会违反上下文无关语法的规则,并且会大大增加复杂性我的扫描仪。

如何以明确的方式扫描签名数字,以正确确定什么是数字令牌的一部分,哪些不是数字令牌的一部分?

0 投票
2 回答
149 浏览

excel - 如何将行换成已知单词

我需要将一行字符串分成不同的列到excel中。这是我得到的输入。

输入

  • 37006 II 学期 PG 临床研究和临床数据管理考试文凭,2012 年 7 月/8 月 Pharma 法规事务时间:最多 3 小时。分数:100

输出:带有结构的 CSV 记录(代码、Sem/Year、主题、课程、考试日期、时间、分数)

  • 37006,第二学期,PG 临床研究和临床数据管理文凭,制药法规事务,2012 年 7 月/8 月,3 小时,100

我有不同集合中的数据,这些数据构成了上述行。例如:

语法(这是一个数组/字典):

  • 学期[I,II,III,IV,V,VI,VII,VIII,IX,X,1,2,3,4,5,6,7,8,9,10]
  • 年[I,II,III,IV,V,VI,VII,VIII,IX,X,1,2,3,4,5,6,7,8,9,10]
  • 学科[PG临床研究和临床数据管理文凭,LL.B]
  • 课程[医药监管事务、法律-法学]
  • 考试日期[ 2012 年 7 月/8 月,1 月/2 月。2013 ]
  • 时间[3小时]
  • MaxMarks[30,40,50,60,70,80,90,100]

供参考,

  • 我不确定我是否可以使用任何分隔符来打破它,因为它高度不可预测或可靠。
  • 我不确定每行中的文本顺序是否相同,或者没有固定长度、汽车或单词

我的假设是,逐字阅读并尝试与我拥有的任何数组中的任何单词匹配。如果它与任何单词匹配,则将该单词分类为下降类别并添加到excel中的相关列中。

在这里,我知道如何处理数据和一切,除了理解每个单词的优化/最佳方式属于哪个类别。

有没有词法分析专家可以分享一些想法?