首页 > 其他分享 >打造自己的脚本语言jacsl-基于C++(1)

打造自己的脚本语言jacsl-基于C++(1)

时间:2023-07-05 22:46:19浏览次数:48  
标签:脚本语言 int YyTokenType 192 jacsl test 打造 254 maisipu

目录

flex bison

sudo dnf install flex bison
 sudo dnf install flex-devel

统计字数示例

/*字数统计示例*/
%{
int chars=0;
int words=0;
int lines=0;
%}

%%
[a-zA-Z]+ {words++;chars+=strlen(yytext);}
\n {chars++;lines++;}
. {chars++;}
%%
#include <iostream>
using namespace std;
int main(int argc,char **agrv){
	yylex();
	cout<<"单词数:"<<words<<"字符数:"<<chars<<"行数:"<<lines<<endl;
}

g++ lex.yy.c  -o countTxt -lfl
[maisipu@192 test]$ ./countTxt
hello,world
hahah hahah hahah 
单词数:5字符数:31行数:2

简单计算器

/*简单计算器示例*/
%{
#include <iostream>
using namespace std;
%}

%%
"+" {cout<<"PLUS"<<endl;}
"-" {cout<<"SUB" <<endl;}
"*" {cout<<"TIMES"<<endl;}
"/" {cout<<"DIV"<<endl;}
[0-9]+ {cout<<"NUMBER"<<yytext<<endl;}
"\n" {cout<<"新一行"<<endl;}
[ \t] {}
. {cout<<"error:"<<yytext<<endl;}
%%
int main(int argc,char **agrv){
	yylex();
}

[maisipu@192 test]$ ./cpt
11_99+32*77
NUMBER11
error:_
NUMBER99
PLUS
NUMBER32
TIMES
NUMBER77
新一行
 
新一行
[maisipu@192 test]$ ./cpt
11-33-99*212
NUMBER11
SUB
NUMBER33
SUB
NUMBER99
TIMES
NUMBER212
新一行
[maisipu@192 test]$ 


/*简单计算器示例*/
%{
#include <iostream>
using namespace std;
enum class YyTokenType{
PLUS=250,SUB,TIMES,DIV,
INTEGER,
EOL
};
int yylval;
%}

%%
"+" {return int(YyTokenType::PLUS);}
"-" {return int(YyTokenType::SUB);}
"*" {return int(YyTokenType::TIMES);}
"/" {return int(YyTokenType::DIV);}
[0-9]+ {yylval=atoi(yytext);return int(YyTokenType::INTEGER);}
"\n" {return int(YyTokenType::EOL);}
[ \t] {}
. {cout<<"error:"<<yytext<<endl;}
%%
int main(int argc,char **agrv){
	int tok;
	while (tok=yylex()){
		cout<<tok;
		if (tok==int(YyTokenType::INTEGER)){
			cout<<"="<<yylval<<endl;
		}
		else{
			cout<<endl;
		}
	}
}

[maisipu@192 test]$ ./cpt
11*66+99*77
254=11
252
254=66
250
254=99
252
254=77
255
^C
[maisipu@192 test]$ ./cpt
11*66-99*77/3
254=11
252
254=66
251
254=99
252
254=77
253
254=3
255
^C
[maisipu@192 test]$ 

标签:脚本语言,int,YyTokenType,192,jacsl,test,打造,254,maisipu
From: https://www.cnblogs.com/waterruby/p/17529841.html

相关文章

  • 计讯物联5G数采仪助力打造化工园区企业工况监测系统
    项目背景随着我国化工行业的快速发展,化工园区已成为化工行业发展的重要阵地,化工企业聚集,危险化学品安全风险集中,安全规范问题逐渐成为行业关注的焦点。然而,我国化工园区发展水平发展参差不齐,尤其是在安全风险管控转型、智能化升级、专业监管等方面存在明显不足和问题,安全环境风险......
  • Eolink 全新一代「AI+API」协作管理平台,大模型驱动打造 API 研发管理与自动化测试!
    行业首发!Eolink全新一代「AI+API」协作管理平台,实现「AI+API」结合,大模型驱动打造API研发管理与自动化测试全新体验。Eolink「AI+API」为API带来什么?输入语义化指令即可生成API文档内容;在API文档测试页中可一键生成测试请求数据;可实现圈定API文档范围智能生......
  • 「API 生态」Eolink 与 API7 达成战略合作,共同打造 API 治理解决方案
    在当今竞争激烈的市场环境中,企业不断地向数字化转型迈进,API已经成为数字化转型中不可或缺的一环。如何统筹规划、管理保护API早已成为企业研发团队的核心挑战。Eolink和API7支流科技作为国内领先的专业厂商,一直引领着API管理及应用安全领域的发展。面对企业API管理......
  • 特别呈现|腾讯云 X K+ 峰会共同打造软件工程新生态
    近日,K+全球软件研发行业创新峰会在上海成功举办。会上,峰会钻石合作伙伴腾讯云倍受瞩目。其参会展台人潮涌动,演讲内容也深受关注和好评。腾讯云是腾讯集团倾力打造的云计算品牌。作为腾讯云的重要产品线之一,腾讯云CODING涵盖一站式研发管理平台及云原生工具,为互联网、金融、政......
  • 云享·案例丨打造数智物流底座,华为云DTSE助力物联云仓解锁物流新“速度”
    摘要:华为云凭借领先的技术和快速响应的开发者支持服务,助力物联亿达实现云上资源高可用、提升系统安全性与稳定性,为物联亿达提供了扎实的数字化基础。本文分享自华为云社区《云享·案例丨打造数智物流底座,华为云DTSE助力物联云仓解锁物流新“速度”》,作者:华为云社区精选。数字化......
  • 揭秘腾讯研究院:三分之二精力打造免费产品
    本文发表于2009-10-2008:4310/27/20091:41:33PM低调已经成了腾讯管理层共同的标签,却让我们更想认识他们神秘的技术带头人郑全战。他和他的团队在做什么?承担着怎样的使命?记者零距离解密腾讯研究院。9月底,全国上下期待着60周年国庆庆典的到来,而郑全战也在为另一场盛事摩拳擦掌。......
  • 金山软件发布手机网站 打造手机应用程序商店
    本文发表于2009-10-2815:4311/6/200910:27:56AM金山软件正式发布了全新的无线互联网站点金山手机网wap.shouji.cn,针对手机上网用户提供各种手机应用服务,用户即日起就可使用手机登录。据金山手机网总经理黎万强表示,金山手机网作为金山软件旗下的手机WAP站,不仅向数千万金山软件......
  • 电商神器!教你如何利用数据分析打造销售奇迹!
    能解决80%通用需求,提供销售、财务、广告、库存等电商数据分析主题的奥威BI电商数据分析方案一直都是比较神秘的存在。有说它风险低的,也有说它性价比高、效率高、可塑性高(支持个性化开发),但说到底,这份BI电商数据分析方案究竟是怎样的却并没有多少人了解。今天我们就从它的组成、优势......
  • 数据可视化:打造高端的数据报表
    要打造高端的数据报表,以下是一些关键要点:明确目标和受众:首先,明确您的报表的目标是什么以及谁是受众。这有助于确定需要呈现的数据和信息类型,以及选择合适的可视化方式。精选数据和信息:仔细选择和筛选要在报表中呈现的数据和信息。只选择最重要、最相关的数据,并避免过载报表。关注关......
  • JAVA的动态性之脚本语言支持API
    JAVA语言是一种静态类型的编程语言。静态类型的含义是指在编译的时候进行类型检查。JAVA源代码中的每个每个变量的类型都需要显式地进行声明。所有的变量、方法的参数和返回值的类型在程序运行之前就必须是已知的。JAVA语言的这种静态类型特性使编译器可以在编译的时候执行大量的检......