问题标签 [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.
parsing - 脚本语言的词法分析
我正在尝试为资源 API 创建一个简单的脚本。我有一个资源API,主要以结构化的方式创建游戏资源。我想要的是处理这个 API,而不是每次我想要一个资源时都创建 c++ 程序。所以我们(我和我来自 uni 的导师)决定创建一个简单的脚本来创建/编辑资源文件,而无需每次都编译。还有一些其他不相关的因素,我需要命令行界面而不是 GUI 程序。
无论如何,这是脚本示例:
这种脚本语言不是我设计的,API 的所有者设计的。'.' 之前的部分 你可以猜到'.'之后的路径和部分。是实际命令和一些选项、标志等。作为第一步,我尝试创建左侧部分的语法,因为我认为我可以在搜索有关词法分析器和解析器的信息时使用它。问题是我在解析和编程语言方面缺乏经验,我不确定它是否正确。这是左侧的更多示例和语法。
如果这个语法可能是一团糟,我不知道。有 5 种不同的可能性,它们是:
它必须以'/'符号开头,如果它是唯一的符号,我会接受它作为根。
现在我的问题是如何在词法上分析这个脚本?有什么特别的方法吗?我的词法分析器应该做什么和不应该做什么(我读过一些词法分析器也做了句法分析)。您认为语法等在技术上是否合适?我应该使用哪种解析方法(递归下降、LL 等)?我正在努力使它在技术上适合工作。它不是商业的,所以我有时间,因此我可以更好地学习词法分析和解析。我不想使用解析器库。
java - 制作词法分析器
我现在正在使用词法分析器程序,并且正在使用 Java。我一直在研究这个问题的答案,但直到现在我还没有找到任何答案。这是我的问题:
输入:
期望的输出:
我还是一个初学者,所以我希望你们能帮助我。谢谢。
c - 构建扫描仪。识别代币
作为创建扫描器的一部分,我需要执行标记化。
我想将整数和实数扫描为两种不同的标记。例如,如果我有一个令牌 1.0 。
我如何将其分类为整数或实数。
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 语句的方式。
尝试了多种方法,但我被正式卡住了。
parsing - 在 JavaCC 中推送/弹出词法状态
我正在尝试重构一个几乎只使用一种词法状态编写的 JavaCC DSL 解析器。
我的目标是引入一个上下文敏感的新关键字,不会使使用旧 DSL 的旧配置无效。
这个想法是改变词法状态并引入 new 关键字,因此它仅在非常特定的上下文中有效。与早期版本向后兼容。
问题:评论已经改变了词法状态,在评论结束后变回 DEFAULT。改回 DEFAULT 是“硬编码的”,但现在我需要 Comments 来改回最后一个活动的词法状态。
据我了解,将状态保存在堆栈中,推送和弹出它们将帮助我实现这一点(认为这称为 DPDA)。这在 JavaCC 中可能吗?
[编辑,在搜索了更多之后,这就是我得到的:]
似乎在做我想做的事,但它是正确的吗?(在这里考虑前瞻)
flex-lexer - Flex 在默认规则匹配时将换行符打印到标准输出 - 想要改变这种行为
我有以下弹性规则。
它非常适合我的目的,并在与第一条规则匹配时输出;
困扰我的是 flex 还在第二条规则的每个匹配项上打印一个换行符。所以我得到一个充满换行符的标准输出。C中是否有无所事事的OP?我是否隐含地告诉 flex 打印带有空规则操作的换行符?省略“{}”会导致相同的行为。我可以使用 sed 或其他任何东西来过滤掉换行符,但我宁愿告诉 flex 停止打印换行符。
我很乐意提供后续示例和数据。
pascal - 词法错误,这种情况两个连续的符号算作词法错误吗?
我在互联网上查看了 Pascal 编程语言的词法错误,但仍然存在这种情况,我不知道它是词法错误还是语义。
case 两个符号(运算符)在一个之后是否算作词汇错误或语义错误?
例如:"+-", "<>", ";;"
或类似的东西。
提前致谢。
perl - 用于传递函数参数的 Perl 自定义语法
我已经使用 perl 有一段时间了。我想知道如何在 perl 中运行以下操作:
要得到结果:
我想我得看看 Perl 的自定义解析技术。这就是我现在正在查看的内容:
和 http://www.perl.com/pub/2012/10/an-overview-of-lexing-and-parsing.html
现在,我不确定要寻找什么或做什么。任何有关如何解决此问题的帮助,阅读内容将不胜感激。请清楚。谢谢你。
context-free-grammar - 区分上下文无关文法中的有符号数和运算
我正在编写一个词法扫描器,我想知道如何区分操作(例如-
)和有符号数(例如-14
)。例如,以下两行都有效:
目前,我的词法扫描器会像这样解析它们:
+12
12
+12
但是,稍后在程序中检查第二条语句的有效性时,它被标记为无效:一个数字标记不能跟在另一个没有相邻运算符的情况下。我希望它们被扫描为:
+12
12
+
12
我可以通过简单地检查前面的字符是否是运算符来实现这一点,如果是,则生成一个带符号的数字标记,否则一个运算符后跟一个数字,但是这样做会违反上下文无关语法的规则,并且会大大增加复杂性我的扫描仪。
如何以明确的方式扫描签名数字,以正确确定什么是数字令牌的一部分,哪些不是数字令牌的一部分?
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中的相关列中。
在这里,我知道如何处理数据和一切,除了理解每个单词的优化/最佳方式属于哪个类别。
有没有词法分析专家可以分享一些想法?