Mr.K 018 发布于五月 1, 2020 分享 发布于五月 1, 2020 · 只看该作者 第19期来力! 照例是个模拟题,这一期敲样例输出可把我累坏了( 有工具专门做这件事没错,所以用了工具的要贴出所有源代码(包括工具的输入脚本等)哦 虽然写了1,但是估计不会有2,因为我估计2的工作量就太大了,不符合我们的初衷。不过这道题还好。 第19期 冰系魔法1 传说在某个异世界里是存在元素的,也存在元素魔法。有一次,那个世界的来客向我们展示了一种那个世界的冰系魔法: public class Artia{ public static void main(String[] argv){ System.out.println("Artia's Ice Magic"); } } MrK-018发现,这段魔法的咒语好像可以分解成一个个的单词,好像还能给单词分类。不过,手动把它们一个个摘出来也太麻烦了,还是写一个程序自动区分出魔法咒语里的单词吧。 输入 一段Java源代码冰系魔法咒语。保证符合语法规范。 输出 对每个单词,输出其单词序号、原文和单词类别。格式参考输出样例。 样例输入 package artia; import java.util.*; public class Artia{ char ch = 'a'; String str = "Artia's Ice magic"; public static void main(String[] argv){ double d = 10.25+1; System.out.println(str); return; } } 样例输出 Token 1: 'package', 'package' Token 2: 'artia', identifier Token 3: ';', ';' Token 4: 'import', 'import' Token 5: 'java', identifier Token 6: '.', '.' Token 7: 'util', identifier Token 8: '.', '.' Token 9: '*', '*' Token 10: ';', ';' Token 11: 'public', 'public' Token 12: 'class', 'class' Token 13: 'Artia', identifier Token 14: '{', '{' Token 15: 'char', 'char' Token 16: 'ch', identifier Token 17: '=', '=' Token 18: '\'a\'', character Token 19: ';', ';' Token 20: 'String', identifier Token 21: 'str', identifier Token 22: '=', '=' Token 23: '"Artia\'s Ice magic"', string Token 24: ';', ';' Token 25: 'public', 'public' Token 26: 'static', 'static' Token 27: 'void', 'void' Token 28: 'main', identifier Token 29: '(', '(' Token 30: 'String', identifier Token 31: '[', '[' Token 32: ']', ']' Token 33: 'argv', identifier Token 34: ')', ')' Token 35: '{', '{' Token 36: 'double', 'double' Token 37: 'd', identifier Token 38: '=', '=' Token 39: '10.25', floating Token 40: '+', '+' Token 41: '1', integer Token 42: ';', ';' Token 43: 'System', identifier Token 44: '.', '.' Token 45: 'out', identifier Token 46: '.', '.' Token 47: 'println', identifier Token 48: '(', '(' Token 49: 'str', identifier Token 50: ')',')' Token 51: ';', ';' Token 52: 'return', 'return' Token 53: ';', ';' Token 54: '}', '}' Token 55: '}', '}' Token 56: <EOF>, <EOF> 链接到点评
yhz012 发布于五月 1, 2020 分享 发布于五月 1, 2020 (已修改) · 只看该作者 是编译器模拟器…… 看意思应该是要写个parser? 是我最弱的项目了 五月 1, 2020,由yhz012修改 链接到点评
Mr.K 018 发布于五月 1, 2020 作者 分享 发布于五月 1, 2020 · 只看该作者 3 分钟前, yhz012 说道: 是编译器模拟器…… 看意思应该是要写个parser? 是我最弱的项目了 不是parser,lexer就行 parser预计是2,不过工作量太大了,我不知道要不要出 链接到点评
yhz012 发布于五月 1, 2020 分享 发布于五月 1, 2020 (已修改) · 只看该作者 5 分钟前, Mr.K 018 说道: 不是parser,lexer就行 parser预计是2,不过工作量太大了,我不知道要不要出 没事,这俩对我来说痛苦程度没有根本上的区别 当然非要说的话就是lexer我对着书写大概能写出来点东西,parser……怕是我对着书也得疼个几天先 突然意识到我这种半路转ML的,CS最硬核的基础其实真的不强,遇到这种就会很疼。感觉不如我滚去出每日概率论挑战 五月 1, 2020,由yhz012修改 yhz012玩游戏因为手残被BOSS虐杀,大喊“这火我不传了!”,结果在路过的一名修女帮助下顺利通关。2节操 注释 ZERC 1.00节操 概率论吗www 链接到点评
Mr.K 018 发布于五月 1, 2020 作者 分享 发布于五月 1, 2020 (已修改) · 只看该作者 2 分钟前, yhz012 说道: 没事,这俩对我来说痛苦程度没有根本上的区别 当然非要说的话就是lexer我对着书写大概能写出来点东西,parser……怕是我对着书也得疼个几天先 没事 执此flex/bison/antlr4,微笑面对词法分析器,java是大便( 五月 1, 2020,由Mr.K 018修改 链接到点评
yhz012 发布于五月 1, 2020 分享 发布于五月 1, 2020 (已修改) · 只看该作者 5 分钟前, Mr.K 018 说道: 没事 持此flex和ANTLR,语法分析是大便(确信 (我能说其实我不知道有这些开源的么) 不过反正每日挑战肯定还是自己写着玩比直接调包有意思就是了,至少我是这么觉得的 不过下周一之前我作业的ddl大概不够我自己再分出来一大块时间研究怎么写这个就是了 (顺带其实我真的一点都不会java,我是带类的C风格的C++党和python党( 五月 1, 2020,由yhz012修改 链接到点评
Mr.K 018 发布于五月 1, 2020 作者 分享 发布于五月 1, 2020 (已修改) · 只看该作者 6 小时前, yhz012 说道: (我能说其实我不知道有这些开源的么) 不过反正每日挑战肯定还是自己写着玩比直接调包有意思就是了,至少我是这么觉得的 不过下周一之前我作业的ddl大概不够我自己再分出来一大块时间研究怎么写这个就是了 (顺带其实我真的一点都不会java,我是带类的C风格的C++党和python党( Java和C这样的成熟的语言语法其实很复杂,但是词法部分其实还算简单,因为无非就关键字/运算符/常量/标识符这么几大类,再往下分也不是词法分析能干的事情。所以这些语言的词法分析任务不难,写一个DFA,然后遍历一遍输入的程序就完了 实际上调库的话也是得自己定义出词法的确切定义的,flex和antlr能做的只是帮你搭一个DFA,没了。这也是为什么这里允许调库,但是要给出相应库使用的脚本 五月 1, 2020,由Mr.K 018修改 zz错误( Mr.K 018在文学领地阅读作品时遇到了穿着女仆装的文学少女,待她离开后找到了遗落的10节操 链接到点评
yhz012 发布于五月 1, 2020 分享 发布于五月 1, 2020 · 只看该作者 2 分钟前, Mr.K 018 说道: Java和C这样的成熟的语言语法其实很复杂,但是词法部分其实还算简单,因为无非就关键字/运算符/常量/标识符这么几大类,再往下分也不是词法分析能干的事情。所以这些语言的词法分析任务不难,写一个DFA,然后遍历一遍输入的程序就完了 实际上调库的话也是得自己定义出词法的确切定义的,bison和antlr能做的只是帮你搭一个DFA,没了。这也是为什么这里允许调库,但是要给出相应库使用的脚本 看了下感觉是花2个小时时间解决的掉的问题,容我赶完作业回来补好了 链接到点评
Mr.K 018 发布于五月 1, 2020 作者 分享 发布于五月 1, 2020 · 只看该作者 刚刚, 莫得姓名 说道: 你现在不仅负责出数学题祸害苍生,还兼职敲代码吸人精气!? 不不不,我只负责吸人精气(确信 链接到点评
推荐贴