使用parse generator遇到的一点问题,刚刚入门啊

http://apps.hi.baidu.com/share/detail/51468885

按照这个链接做练习,出现了很多不可思议的问题,我承认是自己的问题。弄了半天,虽然原理还没有弄那么清楚,但是最起码已经能运行了。

mylexer.l

%{
#include <stdio.h>
#include <string.h>
#include "myparser.h"                  //注意,这里的头文件要和Parser Generator生成的头文件名一样。
extern char *yytext;
extern YYSTYPE yylval;
%}
%%
[0-9]+                  {yylval.number=atoi(yytext); return NUMBER;}
heater            return TOKHEATER;
heat                    return TOKHEAT;
on|off                  {yylval.number=!strcmp(yytext,"on"); return STATE;}
target                  return TOKTARGET;
temperature             return TOKTEMPERATURE;
[a-z0-9]+        {yylval.string=strdup(yytext);return WORD;}
\n                      /* ignore end of line */;
[ \t]+                  /* ignore whitespace */;
%%

myparser.y

%{
/****************************************************************************
myparser.y
ParserWizard generated YACC file.

Date: 2012年5月6日
****************************************************************************/
#include <stdio.h>
#include <string.h>
#include "mylexer.h"
void yyerror(const char *str)
{
  fprintf(stderr,"error:%s\n",str);
}
int yywrap()
{
  return 1;
}
main()
{
 yyparse();
 }
 char *heater="xl's test";
%}

/
// declarations section

// attribute type


// place any declarations here

%token TOKHEATER TOKHEAT TOKTARGET TOKTEMPERATURE
%union 
{
    int number;
    char *string;
}

%token <number> STATE
%token <number> NUMBER
%token <string> WORD
%%

commands:
    | commands command
    ;
command:
    heat_switch | target_set | heater_select
    ;
heat_switch:
    TOKHEAT STATE 
    {
        if($2)
            printf("\tHeater '%s' turned on\n", heater);
        else
            printf("\tHeat '%s' turned off\n", heater);
    }
    ;
target_set:
    TOKTARGET TOKTEMPERATURE NUMBER
    {
        printf("\tHeater '%s' temperature set to %d\n",heater, $3);
    }
    ;
heater_select:
    TOKHEATER WORD
    {
        printf("\tSelected heater '%s'\n",$2);
        heater=$2;
    }
    ;


我还纠结一个问题,如果这样子不改名字可能更是正确的,改过名字之后就只有两个文件,不知道到底是怎么回事。研究中......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值