×

tokenizer to token

tokenizer(怎么理解token,tokenize,tokenizer)

admin admin 发表于2022-09-03 01:03:39 浏览250 评论0

抢沙发发表评论

本文目录

怎么理解token,tokenize,tokenizer


1、一种解释

token:令牌
tokenize:令牌化
tokenizer:令牌解析器

2、另一种翻译是:token可以翻译为“标记”,tokenize可以翻译为“标记解析”或“解析标记”,tokenizer可以翻译为“标记解析器”。

在编写词法分析器(Lexer)或语法分析器(Parser)的时候,除了Lexer和Parser这两个词会经常使用外,tokenize和tokenizer也会经常出现,基本上所有涉及到词法解析的源码都会用到tokenize。-tokenizer

在邱仲潘译的《Mastering Java 2》有这儿一段:

StreamTokenizer类根据用户定义的规则,从输入流中提取可识别的子串和标记符号,这个过程称为令牌化 ([i]tokenizing[/i]),因为流简化为了令牌符号。令牌([i]token[/i])通常代表关键字、变量名、字符串、直接量和大括号等 语法标点。-to


求StringTokenizer的用法


StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。
使用正则表达式很容易的
String input=“aZ8sd★yu” ;
String result = input.split“^[a-zA-Z]“;
好久没用正则表达式了,也不知道正确不正确。。。
希望对你有所帮助
string tokenizer 类允许应用程序将字符串分解为标记。tokenization 方法比 StreamTokenizer 类所使用的方法更简单。StringTokenizer 方法不区分标识符、数和带引号的字符串,它们也不识别并跳过注释。
可以在创建时指定,也可以根据每个标记来指定分隔符(分隔标记的字符)集合。
StringTokenizer 的实例有两种行为方式,这取决于它在创建时使用的 returnDelims 标志的值是 true 还是 false:
如果标志为 false,则分隔符字符用来分隔标记。标记是连续字符(不是分隔符)的最大序列。
如果标志为 true,则认为那些分隔符字符本身即为标记。因此标记要么是一个分隔符字符,要么是那些连续字符(不是分隔符)的最大序列。
StringTokenizer 对象在内部维护字符串中要被标记的当前位置。某些操作将此当前位置移至已处理的字符后。
通过截取字符串的一个子串来返回标记,该字符串用于创建 StringTokenizer 对象。
下面是一个使用 tokenizer 的实例。代码如下:
StringTokenizer st = new StringTokenizer(“this is a test“);
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
输出以下字符串:
this
is
a
test
StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String 的 split 方法或 java.util.regex 包。
下面的示例阐明了如何使用 String.split 方法将字符串分解为基本标记:
String result = “this is a test“.split(“\\s“);
for (int x=0; x《result.length; x++)
System.out.println(result[x]);
输出以下字符串:
this
is
a
test
-tokenizer

怎么理解token,tokenize,tokenizer.


1、一种解释

token:令牌
tokenize:令牌化
tokenizer:令牌解析器

2、另一种翻译是:token可以翻译为“标记”,tokenize可以翻译为“标记解析”或“解析标记”,tokenizer可以翻译为“标记解析器”。

在编写词法分析器(Lexer)或语法分析器(Parser)的时候,除了Lexer和Parser这两个词会经常使用外,tokenize和tokenizer也会经常出现,基本上所有涉及到词法解析的源码都会用到tokenize。-tokenizer

在邱仲潘译的《Mastering Java 2》有这儿一段:

StreamTokenizer类根据用户定义的规则,从输入流中提取可识别的子串和标记符号,这个过程称为令牌化 ([i]tokenizing[/i]),因为流简化为了令牌符号。令牌([i]token[/i])通常代表关键字、变量名、字符串、直接量和大括号等 语法标点。-to


初学者该从哪里入门学习写 tokenizer 和 grammar analyzer


可以先写一个Datalog解释器。接着由 Earley Deduction 变形成 Earley Parser ,再由 Earley Parser 退化成 LR Parser ,LR Parser 又可以退化成 SLR 和 LALR ,同时还可以退化成 NFA ,NFA 还可以编译成 DFA ,DFA是一种特殊的NFA。另一方面,Datalog从动态规划改成回溯,就变成了Prolog,Prolog 的 DCG 其实和 PEG 是类似的东西。PEG继续退化,就变成PCRE那种回溯风格为主的“正则表达式”。同时,PEG加一点tabling,就变成了 Packrat 。学了Datalog,其他部分都是可以很容易自己推导出来的,看那么多厚厚的书才是
-to

StringTokenizer和StrTokenizer有什么区别


StringTokenizer 是jdk自带的类,印象里是前兼容的,现在一般用string.split代替使用。
StrTokenizer 是apache维护的一个开源包中的一个类,就是说它是一直在维护更新的。这个没用过,可能有些新功能在里面,可以参照文档
-tokenizer

Python分割字符串 有无和c++中的tokenizer同样功能的用法


import
re
str=“a
=
f1(`MAX(b,
0.0,
1.0)
+
0.5);“
print
re.split(’[
()+=;]+’,str)
这样会多出一个’’,可以把最后一个字符串去掉:
print
re.split(’[
()+=;]+’,str)[:-1]
-to

会写Parser,Tokenizer 是什么水平


不吹不黑,一个数据结构及格的程序员,即使完全不懂编译原理,看一下nfa和递归下降的原理再写一个简单的tokenize和parser解析一个简单的语言两天应该能搞定。不过要是吃透编译器前端的那么多知识,比如nfa-》dfa到最小dfa,LL/LR/SLR/LALR,能做到手写标准的正则引擎,山寨yacc的水平的话,不潜下心来钻研个一年半载估计是没戏。能做到这个水平,全国任何公司的offer肯定都是任意挑选的。反正我比较笨学了好多年都还没吃透
编译器前端的到目前为止确实像是到头了,像lex、yacc、antlr这么多工具你看看手册就能写个parser出来。而编译器后端的代码生成、数据流分析、寄存器分配这些怎么就没见多少人谈论?还不是因为这部分跟前端相比难得多,高手都直接发论文了,普通人接触过这些东西就会发现自己知识的浅薄不敢乱吹牛了。
-tokenizer

4. stringtokenizer类的主要用途是什么 该类有哪几个重要的方法


StringTokenizer 是一个Java的类,属于 java.util 包,用来分割字符串和枚举类型。
StringTokenizer 构造方法:
1. StringTokenizer(String str) :构造一个用来解析 str 的 StringTokenizer 对象。使用默认的分隔符:空格(““)、制表符(\t)、换行符(\n)、回车符(\r)。
2. StringTokenizer(String str, String delim) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符。
3. StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。
StringTokenizer 常用方法:
1. int countTokens():返回nextToken方法被调用的次数。可以用来计算字符串分割单元的个数。
2. boolean hasMoreTokens():返回是否还有分隔符。可以用来判断,字符串分割有没有处理完。
3. boolean hasMoreElements():判断枚举 (Enumeration) 对象中是否还有数据。用来判断枚举类型有没有处理完。
4. String nextToken():返回从当前位置到下一个分隔符的字符串。
5. Object nextElement():返回枚举 (Enumeration) 对象的下一个元素。
6. String nextToken(String delim):与 4 类似,以指定的分隔符返回结果。
-to

关于Java的StringTokenizer的问题


根据StringTokenizer的文档,其构造函数的第二个参数,是一个String,表示所有起分割作用的character。
也就是说,StringTokenizer只能用单个character做分隔符,一旦遇到w或者c就会分割一下。
如果题主想用“wc”整体作为分隔符,可以直接用String类的split方法。
-tokenizer

java StringTokenizer类的问题


StringTokenizer st = new StringTokenizer(ObjStr, “|“);//将objStr这个字符串,按|来分隔,但你这样写是错误的,应该改成[|]或“\\|“
for (int i = 0; i 《 10; i++) {//循环10次,应该是与下面的m_sName和m_nScore的长度对应的
if (st.hasMoreTokens()) {//按|折分,这个方法是指是否还有下一项
String sStr = st.nextToken();//上面说了,你的objStr按|来拆分的,这个方法得到你拆分后的下一个串
StringTokenizer stt = new StringTokenizer(sStr, “@“);//这里与上面相同,把OBJSTR拆分后一每一项再按@来拆分
m_sName[i] = stt.nextToken();//按@拆分后,第一项赋值给m_sName[i]
try {
m_nScore[i] = Integer.parseInt(stt.nextToken());//第二项为按@拆分后的第二项
} catch (Exception e) {//异常捕获,不多说
m_nScore[i] = 0;
}
} else {//不说了
m_sName[i] = “None“;
m_nScore[i] = 0;
}
}
-to