lex和yacc简介

今个又要捣鼓可恶的lex和yacc,当年编译原理被虐成翔,毕业之后,满以为可以和词法语法说“债贱~债也不贱”~

结果读研又用到它门了。。。先去实验室了,等下再补上~


好吧,总算搞好了部分词法语法功能了,来说道说道咱对lex和yacc的认识~

貌似这两个单开也可以用的样子,不过我的目的是检查命题公式:a&b->c. b|d->b&c. (a&b)|~d. ~d->a.这些。

检查同时导入内存,就是存入自己建的结构体了。


lex是词法处理,明显的~

因为在C++里运行,所以第一部分要加

extern "C" {
    int yywrap(void);
    int yylex(void);
}

然后第二部分,称为规则部分,形如下面:

"->"                                    {return S_IMPL;             }
"~"                                     {return S_NEG;              }
"("                                      {return LPAREN;            }
")"                                      {return RPAREN;           }
"&"                                     {return S_CONJ;           }

最后一部分用户例子,咱不用了~

另外注意的是

FILE *yyin是默认输入,把要读文件赋值给它就好~

FILE *yyout是输出~


yacc语法处理,目前实现了&,|,~,因为->和()有优先级,暂时没实现,实现了再说~

具体的&,|,~实现貌似挺容易~

我这主要之前的结构体不太好用,所以一直悲剧,后来改了结构体,就容易多了~

yyparse()这个函数功能是执行~直接读yyin,或者命令行里自己输入~


差不多就这些了。。乱七八糟。。毫无逻辑。。。等有空修改吧。。


再接着写点,关于优先级,在yacc里定义左结合的时候如下

%left S_IMPL
%left S_DISJ
%left S_CONJ

越往后优先级越高~所以会先识别后面的~

这样很是方便~

另外yyin能读取,但是yyout不能输出到文件,只能输出到stdout标准输出。。。随它去吧。。。这个也没什么需求/。/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值