【发布时间】:2010-10-05 18:02:12
【问题描述】:
将以下内容视为令牌:
- +, -, ), (
- 字母字符和下划线
- 整数
实现1.getToken() - 返回下一个token对应的字符串 2.getTokPos() - 返回当前token在输入字符串中的位置
示例输入:(a+b)-21)
输出: (| a| +| b| )| -| 21| )|注意:不能使用 java 字符串分词器类
正在进行中 - 成功标记化 +,-,),(。需要弄清楚字符和数字:
输出:+|-|+|-|(|(|)|)|)|(| |
【问题讨论】:
-
即使您可以使用分词器,也要使用拆分。 ;)
-
@Bozho 我实际上更喜欢标记器——我不知道如何让 String.split 返回标记,而且我不信任正则表达式——但我确定它们是否对你来说似乎很自然,那么 string.split 就更有意义了。
-
有谁明白为什么教育工作者给学生分配做某事的任务,而不是让他们使用盒子里的图书馆?我的意思是 90% 的 Java 知识是知道使用哪个类,而不是知道使用哪个运算符。好吧,它可能与学习基础知识有关,但它仍然违背了规律。
-
@Peter Tillermans 这不仅仅是关于基础知识,它还使学生能够学习基础知识要少得多。像这样的练习可以是查看循环和字符串操作等基本事物的好地方,是的,但它也是使用标记器的事物的一个引导点,例如递归体面解析,然后导致 LL(k)预测解析等进入语言构造。对于那些一开始就没有真正掌握字符串标记的学生来说,所有这些事情似乎都是魔法。
-
@Zoe 我有点知道,但仍然......我做了解析器/解释器的分享,但我看不到实现低级编程如何帮助加深 LL(k) 预测解析的知识。如果您在开始之前没有完全理解它,那么您只是将自己挖得更深,并且在损坏的代码中保持高腰只会导致认知超载和感觉愚蠢,这两者都不会导致更好的理解(尽管它可能会减少傲慢) .我想我见过太多人认为实现功能比阅读提供它的库的 API 更快。
标签: java