美文网首页程序员
SmileyFuckの词法分析初步

SmileyFuckの词法分析初步

作者: 秋纫 | 来源:发表于2014-01-22 00:14 被阅读101次

    SmileyFuck的GitHub已经建好了。

    就在不到半个小时前,我实现了SmileyFuck初步的词法分析。

    我从lex源代码中截取一段出来。这些是SmileyFuck中会用到的token,前面的字符串或正则表达式表示它的形式,后面的返回值表示它的标志:

    [ \t]   return SPACE;
    ":"     return COLON;
    ";"     return SEMICOL;
    ","     return COMMA;
    "-"     return MINUS;
    "("     return LP;
    ")"     return RP;
    "D"     return DCAP;
    "."     return DOT;
    [Oo]    return OLETTER;
    "*"     return ASTER;
    "="     return EQUAL;
    "_"     return USC;
    "^"     return CARET;
    "<"     return LAQ;
    ">"     return RAQ;
    "~"     return TILDE;
    [Yy]    return YLETTER;
    "\n"    return CR;
    

    又从yacc源代码中取得巴克斯范式:

    smiley_total
        : smiley_total SPACE smiley
        | smiley CR
        | smiley_total CR
        ;
    smiley
        : emotion
        | icon
        ;
    emotion
        : emotion_without_hair
        | e_hair emotion
        ;
    e_hair
        : EQUAL
        ;
    emotion_without_hair
        : e_eye e_mouth
        | e_eye e_nose e_mouth
        ;
    e_eye
        : COLON
        | SEMICOL
        ;
    e_nose
        : MINUS
        | COMMA
        ;
    e_mouth
        : LP
        | RP
        | DCAP
        | OLETTER
        | ASTER
        ;
    icon
        : i_eyel i_mouth i_eyer
        | i_cheekl i_eyel i_mouth i_eyer i_cheekr
        | i_shapel i_eyel i_mouth i_eyer i_shaper
        | i_shapel i_cheekl i_eyel i_mouth i_eyer i_cheekr i_shaper
        | i_arml i_shapel i_eyel i_mouth i_eyer i_shaper i_armr
        ;
    i_mouth
        : USC
        | OLETTER
        | DOT
        ;
    i_eyel
        : i_eye
        | RAQ
        ;
    i_eyer
        : i_eye
        | LAQ
        ;
    i_eye
        : CARET
        | TILDE
        | MINUS
        | OLETTER
        ;
    i_cheekl
        : i_cheek
        ;
    i_cheekr
        : i_cheek
        ;
    i_cheek
        : ASTER
        | EQUAL
        ;
    i_shapel
        : LP
        ;
    i_shaper
        : RP
        ;
    i_arml
        : i_arm
        ;
    i_armr
        : i_arm
        ;
    i_arm
        : YLETTER
        | OLETTER
        ;
    

    可以用巴克斯范式套进之前构想中所用到的符号试试。解释一些表情就是这么简单。

    可是,我实现的只有词法分析器呢,也就是说,它只会检查语法,如果没有问题,就什么也不说;直到查到问题才会报警。

    相关文章

      网友评论

        本文标题:SmileyFuckの词法分析初步

        本文链接:https://www.haomeiwen.com/subject/ptbctttx.html