问题标签 [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.
java - java词法分析器(用于挖掘能够对其进行语义分析的java代码)
我想要一个用于 java 代码的词法分析器。我应该自己写还是应该使用预先存在的工具?是否可以让我的词法分析器的行为与 Java 词法分析器相同,而无需编写我自己的正则表达式?
例如,如果我有这样的课程:
我希望它的输出看起来像这样
如果您有任何想法,请告诉我。
flex-lexer - 使用 flex 创建词法分析器
作为一项学校作业,我正在使用 FLEX 创建一个词法分析器。分析器由解析器使用,它也是分配的一部分。我们应该为一种称为 VSL 的语言使用词法分析器和解析器。但是,我似乎无法让分析仪工作。
我将使用 VSL 中的一些关键字作为示例:FUNC、PRINT 和 IF。
这是规则部分的当前输出:
这 。当不匹配任何其他规则时,只需一个一个地返回每个字符,并在大学的近乎空的文件中提供。要返回的令牌在提供的解析器中指定,上面使用的三个都在其中。我从测试输出(也由提供的工具生成)确定 FUNC、START 和 PRINT 被识别,但它们没有出现在测试输出中,显然它们没有被传递。我对变量(字符串、数字等)有同样的问题。它们由数字和/或字母组成,在规则中处理(也不需要显示它们)。我究竟做错了什么?我下一步要做什么?
如果我删除我制定的每一条规则,并让最后一条规则带有 . 仍然存在,然后所有字母和数字在测试输出中变得可见,所以我知道词法分析器至少可以识别它们。但下一步是什么?
java - 用于在 Java 中识别字符串的词汇特征的库
目前我需要在Java中找到字符串的一些特殊词法特征,例如
- 字符总数
- 字母字符总数
- 大写字符总数
- ....我想知道有没有图书馆可以做到这一点?节省编码时间会很棒。
非常感谢。
python - 即使没有关键字 `not`,`1 < 2` 是否是布尔运算中的 `not_test`?
我正在阅读 Python 文档 2.76
文档中的符号在这里解释:
竖线 (|) 用于分隔备选方案;它是这种表示法中约束力最小的运算符。
现在问题来了:
被
not_test ::= comparison | "not" not_test
解析为not_test ::= comparison | ("not" not_test)
?如果
1.
为真,则有效comparison
也是有效的not_test
。(例如1 < 2
,not_test
即使其中没有 anot
。)此外,因为 valid
and_test
只能是一个 validnot_test
,1 < 2
所以也是一个 validand_test
。对于or_test
.那么什么是有效的
comparison
?1 < 2
显然符合模式。并且这些按位比较 expr 也是有效的comparison
。共同点是至少需要一个运算符('>'、'<' 或按位的东西)。(我不知道。)这是奇怪的部分。例如考虑
x and y
。根据
and_test ::= not_test | and_test "and" not_test
and_test ::= not_test | (and_test "and" not_test)
# 我相信这样解析?
如果它是x and y
一个有效的and_test
(它永远不可能是not_test
存在的and
),那么它x
必须是一个有效的and_test
,它只能是一个有效not_test
的。并且y
必须也是有效的not_test
。
Anot_test
可以是单一的,也可以是前面有 的comparison
另一个。所以 a基本上是零个或多个s 后跟一个。现在重要的是.not_test
not
not_test
not
comparison
comparison
根据4.
,一个comparison
必须至少有一个运算符。但这与以下示例冲突:
分配 x = 3, y = 4 。3 and 4
似乎是一个有效的and_test
.
但我不知道如何3
或4
可以是有效comparison
的。我哪里做错了?
compiler-construction - 词法分析器:通过有限自动机实现正则表达式?
问候!
在阅读 Dragonbook 的第 3 章(词法分析)时,我几乎了解了所有内容(他们如何用正则表达式指定标记),直到他们开始谈论有限自动机。它似乎是描述词法分析器的重要部分。
现在我了解了有限自动机的概念,但我不了解它在词法分析器中的作用和用途?为什么不仅仅用正则表达式指定标记?
提前致谢。
c - 在简单的词法分析器中将字符作为字符串
我正在尝试在 C 中实现一个简单的词法分析器。我的问题是关于字符和字符串。通常在我的链表插入中,我将 char 作为参数。但是在关键字的情况下,因为它们在打印时是字符串,所以我遇到了问题:
虽然我的输入是:
通常我得到这样的输出:
我知道在关键字的情况下我不应该给出p[0]。我还检查了我的结构定义并将我的char lexemes设置为char lexemes[]但我遇到了一些错误。我试图找到适当的 str 类的 C,但我找不到。我希望我的输出如下:
所以你有什么建议?我应该怎么做才能实现它?
mysql - 重用 MySQL 解析器
我正在研究 SQL入侵检测系统 (IDS),我需要解析传入的 SQL 查询。编写自己的 SQL 解析器是一项长期任务,它永远不会准确反映原生解析器中使用的逻辑。我发现 MySQL 有一个带有主源文件的词法分析器sql/sql_lex.cc
和一个用来自sql/sql_yacc.y
. 我对重用这个强大的解决方案非常感兴趣。我正在用 C/C++ 构建我的 IDS,所以我正在寻找某种方法将 MySQL 解析器与我的检测系统连接起来。
我想知道是否可以重用 MySQL 解析器(词法+语法分析器)以某种逻辑形式(例如语法树)获取 SQL 查询的结构。这有没有可能?是否有一些相关的文本、教程或项目?
谢谢
flex-lexer - 带有 flex 的词法分析器
我正在尝试使用 flex 为一种小语言构建一个词法分析器。
词法将读取一个词位的文本文件,并给每个词位一个标记,并将该标记写入另一个文件。该代码能够使用 yylex() 函数打开文件并从中读取。
问题是代码没有在指定文件中写入令牌。我还发现,该代码无法识别数字并为标识符的每个字母赋予一个 IDENTIFIER 令牌我尝试了许多方法来克服这些问题,并且我使用 ac 语言网站编写了正确的 C 代码。
一个小通知是我不想使用 .y 解析器来读取词位并将其传递给词法我希望我的词法自行读取标记并生成标记。
那么任何人都可以帮我解决问题吗?
language-agnostic - 形容词词法的定义
在互联网上,我已经阅读了形容词词汇的一般含义:一个单词与物理世界或抽象概念相关的含义,而没有提及该单词可能出现的任何句子。
我已经看到这个词在许多不同的上下文中使用过:词法作用域、词法分析、词法常量、词法运算符等。
为什么人们选择在作用域之类的东西前面使用词法这个词?我看不出词法的定义和词法范围之间有任何关系。词法分析、词法常数等也是如此。
我知道您想给某个东西起个名字,这样您就可以更容易地引用它,但是为什么要给它起一个没有意义的名字呢?如果它确实有意义,那么你能澄清它是如何做到的吗?
我看到了一个不同的线程,其中有人问 C++ 中的词法是什么意思:“词法”一词在 C++ 中是什么意思?
该问题的最佳答案解释了词法意味着它与源代码有关。那么我的问题是:编程中的任何东西与源代码无关?不是每一种范围、常数、形式的代码分析都与源代码有关吗?另外,词法的定义与源代码的关系如何?
parsing - 带有双引号的 joSQL 查询解析结果 org.josql.parser.TokenMgrError:词法错误
尝试运行以下代码,在此 SQL 语句中尝试查找 colName2 like group/test" 的值(名称末尾有双引号),并将 querySQL 字符串传递给 josql 解析器。
当我运行它时发生了以下异常,因为 colName2 包含一个带有双引号的字符串。有谁知道如何将双引号传递给 josql 解析器?
线程“主”org.josql.parser.TokenMgrError 中的异常:第 1 行第 150 列出现词汇错误。遇到:
在 org.josql.parser.JoSQLParserTokenManager.getNextToken(JoSQLParserTokenManager .java:1420)
在 org.josql.parser.JoSQLParser.jj_scan_token(JoSQLParser.java:3725
)
.........................
在 org.josql.parser.JoSQLParser.Query(JoSQLParser.java:298)
在 org.josql.parser.JoSQLParser.parseQuery(JoSQLParser.java:86)
在 org.josql.Query.parse(Query.java:2032)
在main.JoSqlTest.main(JoSqlTest.java:12)