转跳到内容

每 日 算 法 挑 战 【第0x13期】


只显示该作者

只有该作者的内容显示中。 返回到主题

推荐贴

第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>

 

链接到点评
2 分钟前, yhz012 说道:

:mx051:没事,这俩对我来说痛苦程度没有根本上的区别

当然非要说的话就是lexer我对着书写大概能写出来点东西,parser……怕是我对着书也得疼个几天先

没事

执此flex/bison/antlr4,微笑面对词法分析器,java是大便(

,由Mr.K 018修改
链接到点评
6 小时前, yhz012 说道:

:mx051:(我能说其实我不知道有这些开源的么)

不过反正每日挑战肯定还是自己写着玩比直接调包有意思就是了,至少我是这么觉得的

:mx005:不过下周一之前我作业的ddl大概不够我自己再分出来一大块时间研究怎么写这个就是了

 

(顺带其实我真的一点都不会java,我是带类的C风格的C++党和python党(

Java和C这样的成熟的语言语法其实很复杂,但是词法部分其实还算简单,因为无非就关键字/运算符/常量/标识符这么几大类,再往下分也不是词法分析能干的事情。所以这些语言的词法分析任务不难,写一个DFA,然后遍历一遍输入的程序就完了

实际上调库的话也是得自己定义出词法的确切定义的,flex和antlr能做的只是帮你搭一个DFA,没了。这也是为什么这里允许调库,但是要给出相应库使用的脚本

,由Mr.K 018修改
zz错误(

Mr.K 018在文学领地阅读作品时遇到了穿着女仆装的文学少女,待她离开后找到了遗落的10节操

链接到点评
×
×
  • 新建...

重要消息

为使您更好地使用该站点,请仔细阅读以下内容: 使用条款