yacc 学习

yacc建议按照如下风格来写:
(1)终端符名全部用大写字母,非终端符全部用小写字母;
(2)把语法规则和语义动作放在不同的行;
(3)把左部相同的规则写在一起,左部只写一次,而后面所有规则都写在竖线“|”之后;
(4)把分号“;”放在规则最后,独占一行;

(5)用制表符来对齐规则和动作。


单引号括起来的标记 不用声明 直接由词法分析程序返回 的字符 与其匹配

一般的标记 是词法分析程序返回一个对应的数字 然后yacc 在语法规则段找到对应的 数字(宏定义) 左侧规则名称匹配

在第一个%%块中声明:

%{
        #include "y.tab.h"
        
        #include <stdio.h>
        #include <string.h>
        extern char* yylval;
        %}
        char [A-Za-z]
        num [0-9]
        eq [=]
        name {char}+
        age {num}+
        %%
        {name} { yylval = strdup(yytext);
        return NAME; }
        {eq} { return EQ; }
        {age} { yylval = strdup(yytext);
        return AGE; }
        %%
        int yywrap()
        {
        return 1;
        }

你可能感兴趣的:(yacc 学习)