SmileyFuckの词法分析初步

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の词法分析初步)