创建一门新的编程语言-Flex&Bison教程-(3)-更实用的小计算器

本教程将介绍如何使用Flex&Bison添加变量存储和简单判断功能到计算器中,包括set变量语法和C语言风格的条件表达式。已实现的功能包括变量赋值和条件运算,使得计算器更加实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来想在这一节进入语法树的学习,然后顺势说完如何转换成汇编,真正做一个真正的编译器
但是呢。。。这个星期事务繁多,要到周末才真正有空,所以这一节还是简单介绍一些不用语法树的简单应用,下次更新可能要等到周末了
此外,我也想找点时间说说关于错误处理和提示等方面的东西,所以说这个教程还有很长的路


支持变量和简单判断的计算器
上一节我们已经实现了一个十分简易的计算器,但是要能说的上实用,还差一些功能
我们计划加入:
简单的变量,用set 变量名 = ...的语法
简单的判断,仿照c语言的a<b?a:b
那好,我们开始设计test3yy.y

%{
#include <iostream>
int yylex();
int yyerror(char *);
using namespace std;
float vars[128]={0};
float last=0;
%}
%token <cv> CHAR
%token SET ANS
%token <fv> Number
%type <fv> exp
%type <iv> cond
%union
{
  char iv;
  float fv;
  char cv;
}
%left '<' '>' '='
%left '+' '-'
%left '*' '/'
%left '?' ':'
%right '(' ')'
%%
program:
        program exp '\n' { cout << "Result: " << $2 << endl; last = $2; }
        | program stat '\n'
        | 
        ;
        
stat   :
        SET CHAR '=' exp { vars[$2] = $4; }


cond   :
        exp '<' exp     { $1<$3?$$=1:$$=0; }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值