c,c++,嵌入式开发工具,环境

模板引擎相信大家是常事利用的,不过落到实处原理臆想没多少人知晓(你借使说不就是replace嘛,那自个儿也无话说了…)。

互连网质量工具:
起名,吞吐率测试工具:qcheck
组播流测试工具:mcast
超过限度组播测试工具:mcasttest
solarwinds
带宽测试:ping plotter freeware
度量有线网络带宽:ixchariot

先来探视那一个SimpleTemplate想落成的是如何效果吗:

 

  1. 是个C#端的模板引擎
  2. 模板中能放平日变量(i, j, index, username那种直接了当的变量名)
  3. 模板中能放复合变量(user.FirstName,
    user.LastName那种有目的前缀的变量)

 

说到底客户端代码通过下边包车型大巴方法展开调用: 

 

static void Main(string[] args)
        {
            string template = @"
your name: @{name}
your age: @{age}
";
            Dictionary<string, object> ctx = new Dictionary<string, object>();

            ctx["name"] = "McKay";
            ctx["age"] = "你猜";

            Console.WriteLine(STParser.GenerateStringView(template, ctx));

            Console.ReadKey();
        }

 

 

 

世家看出来了,重点就在@{xxxx}上

 

大家也先别喷作者,说用正则、replace就化解了,看前边先,小心喷了悔恨。

 

 

 

自个儿接纳用antlr来做那几个模板引擎,因为即使今后看起来这几个模板引擎很不难,可是不意味着现在不增加啊,现在还要出席if/else/for那种通用编程语法的,所以为了增添性,就用语法解析器了。

互连网管理常用工具 (二零一二-03-03 09:22)

知道yacc/flex的也足以去探视,只可是没有C#插件,而antlr正好有那插件,就用了。

标签
网络管理 
工具 
分类:
系统一管理理

 

工具: Smokeping (网络延迟监测工具)
网址:http://oss.oetiker.ch/smokeping/
类型:开放源码
平台: Linux/BSD/Unix/Windows
简介: Smokeping 延迟监测工具采纳 ping
等三种办法监测从网管中央到讲话的各条第叁线路的延期境况。利用这一工具得以监测互联网的品质是不是能满足各样应用的内需。
SmokePing 工作的章程与 MCR-VTG 类似。使用 LAND本田UR-VDtool

下边大家先来写文法规则:

用作本人登录和图形化后台,整个系统工效极度高。

工具: getif ( MIB 浏览器)
网址:http://www.wtcs.org/snmp4tpc/getif.htm
类型:开放源码
平台: Windows
简介: Getif 是2个 windows 版的 MIB 浏览器。输入某装备的 IP 地址和 snmp

parse
    :expression*
    ;

expression
    : stringtext
    | simple_variable
    | complex_variable
    ;

读密码,就可以查阅该设备上有所帮忙的 SNMP MIB 值。

工具: Ethereal (网络协议检查和测试工具)
网址:http://www.ethereal.com/
类别:开放源码
平台: Linux/BSD/Unix/Windows
简介: Ethereal 是一款免费的互连网协议分析程序,扶助 Unix 、 Windows
。借助那么些顺序,你既可以从来从互联网上抓取数据实行分析,也足以对由别的嗅探器抓取后保存在硬盘上的数额举行剖析。你能交互式地浏览抓取到的数据包,查看每二个数据包的摘要和详细消息。
Ethereal
有二种强有力的性状,如帮忙差不多全数的说道、丰硕的过滤语言、易于查看 TCP

 

会话经重构后的数据流等。

工具: Iperf (互连网质量衡量工具)
网址:http://dast.nlanr.net/Projects/Iperf/
项目:开放源码
平台: Linux/BSD/Unix/Windows
简介: Iperf 是三个 TCP/IP 和 UDP/IP
的性质衡量工具,能够提供互连网吞吐率新闻,以及感动、丢包率、最大段和最大传输单元大小等总结音信;从而能够帮忙大家测试网络质量,定位互联网瓶颈。其设计从根本上克制了原本的有的工具,如

parse

ttcp 和 nettest 等的本来面目标老毛病。

工具: Snort (免费的侵犯检测系统)
网址:http://www.snort.org/
类型:开放源码
平台: Linux/BSD/Unix/Windows
简介: Snort 是一款轻量级的网络入侵检查和测试种类,能够在 IP
互联网上海展览中心开实时的流量分析和多少包记录。它不仅仅能开始展览商议分析、内容搜索、内容分外,而且能用于侦测诸如缓冲溢出、隐私端口扫描、
CGI 攻击、 SMB 探测、操作系统指纹识别等大批量的攻击或违规探测。 Snort

规则代表开头规则,那个称号能够友善起名,只就算小写就行。

运用灵活的条条框框去讲述哪些流量应该被采访或被忽略,并且提供一个模块化的探测引擎。

工具: Netcat (互连网瑞士联邦军刀)
网址:hhttp://netcat.sourceforge.net/
类型:开放源码
平台: Linux/BSD/Unix/Windows
简介:一个简练而有效的工具,透过使用 TCP 或 UDP

剧情唯有一行,expression*,代表0个大概最佳个expression规则

协和式飞机的互连网连接去读写多少。它被规划成三个平安的后门工具,能够一向由其他程序松阳高腔本轻松驱动。同时,它也是1个效用强大的网络调节和测试和探测工具,能够建立你须要的大致拥有项目标互联网连接,还有几个很风趣的松手成效。

工具: TCPDump/WinDump (用于网络监测和多少收集的精美嗅探器)
网址:http://www.tcpdump.org/,http://www.winpcap.org/windump/
平台: Windows
简介: Windump
是一款大千世界皆知和受人爱不释手的基于命令行的互连网数据包分析和嗅探工具。它能把匹配规则的数据包的沧州给呈现出来。你能应用这一个工具去寻觅网络难题要么去监视互联网上的风貌。

expression

WinDump 是 Tcpdump 在 Windows 平台上的移植版。

工具: Hping2 (类似 ping 的互联网探测工具)
网址:http://www.hping.org/
品种:开放源码
平台: Linux/BSD/Unix
简介: hping2 能发送自定义的 ICMP/UDP/TCP
包到对象地方并且出示包的响应景况。它有一个便利的 traceroute
格局,并且支持 IP 分片。那些工具在 traceroute 、 ping

看清,第2个是冒号“:”,后续的是要么号“|”,最后是封号”;”

和探测防火墙后的主机时尤其有用。

工具: SolarWinds Toolsets (多量的网络发现、监视、攻击工具)
网址:http://www.solarwinds.net/
类别:商业
平台: Windows
简介: SolarWinds
包蕴多量适合系统管理员做特殊用途的工具,与安全城门失火的工具包罗不少的互联网发现扫描器(

代表expression能够是二种规则中的一种:stringtext、simple_variable、complex_variable,代表普通的字符串文本、简单变量、复合变量规则

network discovery scanner )和3个 SNMP 强力破解器。

工具: NGrep (方便的包匹配和出示工具)
网址:http://www.packetfactory.net/projects/ngrep/
品种:开放源码
平台: Linux/BSD/Unix/Windows
简介: NGrep 在网络层完毕了 GNU grep 的多数职能,基于 pcap
,能够使你通过点名扩张的正则表达式或十六进制表明式去匹配互连网上的多寡流量。它最近能够分辨流经以太网、
PPP 、 SLIP 、 FDDI 、令牌网和环绕设备上的 TCP 、 UDP 和 ICMP
数据包,并且和其余周边的嗅探工具(如 tcpdump 和 snoop )一样,理解 bpf

 

过滤机制。

工具: NTop (互联网采纳情形监测软件)
网址:http://www.ntop.org/
品种:开放源码
平台: Linux/BSD/Unix/Windows
简介: Ntop 是一款显示网络采纳景况的流量监测软件,类似于 UNIX
平台上监视系统进度的 top 命令。在互动形式下, ntop
会将互联网的运用意况展现在用户的终点上;在 Web 情势下, ntop 会做为2个

先来探望常见文本字符串的概念

web 服务器,创造包含互联网境况的 HTML 网页再次回到给用户。

工具: Paketto Keiretsu (极端的 TCP/IP )
网址:http://www.doxpara.com/paketto
类型:开放源码
平台: Linux/BSD/Unix
简介: Paketto Keiretsu 是一组选取新型的不广泛的策略去操作 TCP/IP
网络的工具集合,开发的早期本意是为着在存活 TCP/IP
架构里去落到实处部分效果,但现行反革命一度远远不止了初期的本心。包括的工具有:
Scanrand ,四个难得一见的高速的互连网服务和拓朴发现系统; Minewt ,一个NAT/MAT 路由器; linkcat ,把以太网链路做为标准的输入输出; Paratrace
,不产生新的连天就能追踪互联网路径; Phentropy ,使用 OpenQVIS
在三维拓朴空间里能绘制出自由总量的数据源图形。

 

 

 

人常说,好工匠要有好工具。荀卿说:君子生非异也,善假于物也。叁个好的程序员也毫无疑问有用得最顺手的工具软件。
做C程序员也有两年了,从前期只知道TC,VC,到如明早已离不开很多软件。
上边把自个儿常用的列一下:
写代码:VC帮手,离不开的自发性提醒、自动补全功能。
读代码:Source Insight,一天都离不了。
代码静态检查:pc-lint。想透过好难啊。
文本相比:Beyond Compare,强大的文件比较,常用边相比较边一起。
文本管理:Total
Commander,开机必打开。最常用文件查找、拷贝、相比较,其余众多成效还并未怎么尝试。
编辑器:Ultra 艾德it,最常用十六进制查看,列编辑,偶尔用宏。
脑图:freemind。设计或写文书档案前先理理思路。
统一筹划图:Viso。流程图,或看数据结构图。
串口调节和测试:sscom,dnw,一级终端。
linux环境:cygwin。要在linux环境下交叉编写翻译的时候。
虚拟机:VMWare,有时在linux下用一些cygwin没有装的或版本低的工具或指令。
配备管理:VSS初阶接触,未来用StarTeam,功效太多太细还从未熟练完。
bug管理: bugfree.非他莫属。帮助:MSDN。那些差不离漏了。
乌Crane语:金山词霸。给变量或函数起名的时候常常要查一查。有没有何人知道好用的电脑波兰语专门软件?
还有个日程提示的小软件ATnote。

别的不太常用的:艾德itPlus,VIM(当然也很有力)。

用得糟糕必要继续学的:bash,awk,sed,。。。

 

 

 

 

写代码 vim
读代码 source insight, kscope
编译器 gcc
文件merge ,meld
外语翻译 stardict
操作系统 ubuntu 8.04
模拟windows wine
远程操作 ssh+scp+ftp

 

debugger: od / windbg / softice
disassembler:IDA
editor:notepad++/editplus
boundschecker

 

TC 3.0
UltraEdit 32
SourceInsight
Debug32
BeyondCompare

 

emacs gdb 很愿意学好emacs,一贯没时间。习惯IDE了。

 

正则表明式算工具么?假如算的话,那得抬高egrep,perl,sed……之类的东东。

 

Windows里用Ultra艾德it+gcc(CMD编写翻译运转)

 

最近相比常用
Bookshelf Basic 3.0

 

本子管理用:CleanCase,CVS,VSS,SVN

pspad

Visual C++ 6.0 MSDN Visual Assist NotePad++ SnagIt 7 : 截图工具 Visio
两千 金山词霸二零零五 VMWare Beyond Compare:相比用 Dbgview: 调节和测试用
AddComment:添加注释用 SVN:版本控制 procexp:查看进度

 

ResHack:财富修改,其实自个儿最常用的是用它来替换位图/图标什么的,VC6支撑颜色太低了。
W32dsm/C32Asm:那么些就毫无说了,大街都知道迟早不是做哪些好事 -_-!

FileInfo
Hiew
WinHex
RadASM
UPX
FileMonitor
IceSword

 

写代码:Eclipse, vc, editplus, vim
读代码:Source Insight
文件相比较:Beyond Compare
设计图:smart draw
串口调节和测试:SecureC奥迪Q5T
linux环境:MinGW
虚拟机:VMWare
布局管理:svn  
bug管理: Mentis  
测试: TestLink  

Windows下:
(还算常用,可是貌似也是在Linux下做的)

首先是环境:经过简短设置的CMD;
写代码、读代码:VIM(注意不是GVIM);
编写翻译工具:NMAKE, CL, 哈弗C(98,二〇〇五,二〇〇八版都用);
调节:近来大抵一直用printf()和fprintf(),就算是图形界面SDK程序;
别的工具:貌似有些有别的了。

Linux下:

首先也是环境:bash, gnome-terminal, konsole等,都差不太多;
写代码、读代码:VIM(也不是GVIM);
编写翻译工具:GNUmake, gcc;
调试:gdb;
别的工具:rm, mkdir, grep, awk, sed, lex, yacc(那俩不怎么常用)等等;

另:小编一般是在Linux下开始展览Windows应用程序开发的,所以:
环境:bash, wine;
编写翻译工具:GNUmake, winegcc, CL, 库罗德C(Visual Studio命令行工具);

个人感觉近日协调的环境相对于IDE至少更适合自个儿,而且因为眼前还有个别用收获大批量的代码自动生成(正是当今代码基本上都以友好写的),比如MFC什么的,所以那种命令行的花费环境依旧11分不错的,体量小,灵活方便;越发是当本身将Windows应用程序开发挪到Linux下过后,能够选择人性化得多的Linux工具,包含GNUmake,
更好使的vim等等,所以个人感觉作用比VS的IDE还要高。

其它关于lint程序的难题,我一般的Makefile中变量CFLAGS必有的正是(对于gcc的)-沃尔之类的开关,CL的警示级别小编用的是4,而VC的IDE中暗中同意是3;CL号称当警告级别开到4时展现“相当于lint程序的效果”,其余高版本的CL还有沃尔选项,笔者深信不疑那势必够了,——笔者的作风是硬着头皮用轻量级的东西做。

诚如刚有个BUG,是VS2009中领取的工具cl, nmake, rc等等,不是二零一零,嘿嘿……
除此以外,关于Linux进行Windows应用程序开发,请参见自身拙作:
Windows、Linux下“交叉”编写翻译环境的搭建和测试
注脚:拙作中先后有个小BUG,近来已经消除,但日子原因等,作品中没有进展对应的翻新;另没有将代码打包挂网,望各位谅解!

 

 

—->Dev-c++

  Windows平台下,1个像样VC、BCB的c++ IDE开发环境,属于共享软件。界面亲切优雅,size也非常小,其4.9.x版有普通话语言扶助,无需汉化。编写翻译器基于gcc,完全辅助STL。不过对于规模较大的软件项目,也许难以胜任。能够从:http://www.bloodshed.net/dev/devcpp.html找到有关Dev-c++的有关信息。

  —->Source Insight

  有着和Dev c++一样美好的界面,提供代码的编排和观赛功能,具有丰硕的语法加亮功用,能够像VC一样自动弹出成员函数的唤起,并负有高速方便的函数跳转职能(可是跳转速度就如有点慢)。只是暗中认可设置不切合时,须要精心的调动和修改。不能搜索经typedef之后的名字。

  协助理工科程师具

  —->Visual Assist

  VC IDE环境下的帮衬理编辑程工具,能分辨各类关键字、函数、成员变量,自动给出tip,并机关改进大小写错误,标示拼写错误等。是VC开发的上佳伴侣。 

  —->Understand for C++

  一款c/c++IDE编制程序的扶助理工科程师具,支持反向工程,代码导向和一部分总计功用,从http://www.scitools.com可以找到有关Understand for C++的详细音信。

  程序编辑器

  —->EditPlus

  一款很科学的文本编辑软件,成效强大却又至极翩翩。协助分化语言的语法加亮,还有Project组织功效,具有丰富的自定义功能。通过设置User Tool,能够和任何语言编写翻译器结合,形成3个不难的IDE。

  —->Ultra Edit

  效用和艾德itPlus极度,通过脚本文件提供的安顿效益能够定制编辑环境,但自6.0版之后一贯没多大转变,就编制程序而言,自定义设置没有艾德itPlus方便。 

  —->EMACS

  公认的社会风气上功效最多,最复杂的文本编辑器,其实也得以看成程序员用的编辑器。

  —->Visual Slick Edit

  一个成效强大的程序员用编辑器。最值得一说的是其定制效用,很好用,能够和EMACS比较。自带了一套PCODE解释器,用c的语法,仍可以够挂接动态库。同盟mingw一起使用很方便。从http://www.slickedit.com可以找到有关SlickEdit的详细信息。

  —->IQEdit

  全职能的程序员用编辑器,界面绝对美丽貌,从http://pwksoftware.com可以找到有关IQEdit的详细信息。

  UML/建模

  —->Rational Rose

  强大的建立模型工具,早已“深入人心”,功过自然不必多加评说了。从http://www.rationalsoftware.com.cn可以找到有关Rational 罗斯的详细音讯。

  —->Visual Modeler 

MS Visual Studio 6.0所附的小工具。属于Rational和MicroSoft合营的韬略产品,是罗丝的简化版。
—->Visio

  Microsoft的建立模型工具,感觉更人性化一些,但效果没有罗斯多、强、专,辅助正向的代码生成,以及对代码的反向工程。

  —->Together

  另一款功用强大的建立模型工具,用java编写而成,口碑不错,然则速度稍稍慢了一些。从http://www.togethersoft.com可以找到有关Togather的详细信息,另外,以下网址提供了一个有关Together的教程:    http://www.cc.puv.fi/~tka/kurssit/Tietojarjestelmien\_suunnittelu/together/TCCGuide6

  —->Visual UML

  扶助各样语言类型,比如:VC、VB、DELPHI、CORBA IDL等,能够平素从UML设计图生成代码,不难易用,完全符合Personal use,界面也很手舞足蹈。从http://www.visualObject.com可以找到有关Visual UML的详细消息。

  —->SmartDraw

  通用图表制作软件,能够用来创设团队单位图、流程图、总计图表等。随带有图库,基本满足制作各种图片的急需。从http://www.smartdraw.com可以找到有关SmartDraw的详细信息。

  —->PlayCase

  国产面向对象的建立模型软件,包容UML和IDEF,轻量级软件,只是界面看起来某个简朴,乃是高展先生用Delphi完成的。

  版本控制

  —->ClearCase

  Rational的版本控制管理软件,功用强大,能够决定五系列型的文书档案,甚至席卷Word、Excel、PowerPoint文书档案。但使用复杂,不易上手,且不是免费软件。

  —->CVS

  为基于Web的分布式协同开发提供了版本控制管理手段,且是免费软件,能够经过脚本定制作用。但在权力决定方面机能相对较弱。

  —->VSS

  微软的版本控制管理工具,功效相对简便易行,适合于小型团队开发,将其构成到微软的别的开发工具中,使用起来尤其便利。

  —->SourceOffSite

  微软为开发人士提供的长途访问VSS数据库的工具,使数据库得以远程更新,以支持远程办公。其余的本子管理工科具还包涵:PVCS、VCS、牧马人CS等。

  XML

  —->expat

  用于读取和处理XML文书档案的c函数库,最初是James Clark的村办理文件章,简单轻巧,且速度快。但支撑的编码方式有限,最遗憾的是不帮助中文。从http://expat.sourceforge.net可以找到有关expat的详细信息。

  —->xml4c

  IBM的XML Parser,用c++语言写就,功用拔尖无敌。号称协理多达100种字符编码,能够协助普通话,适合于周边的xml应用。若只是相当小范围的行使,则非最好选项,究竟,你供给“背负”约12M左右的dll的沉重负担。从http://www.alphaworks.ibm.com/tech/xml4c可以找到有关xml4c的详细信息。 

  —->Xerces c++

  Apache的XML项目,同样是c++实现,来源于IBM的xml4c,因而编制程序接口也是和xml4c一致的。可是当前只扶助少数的字符编码,如ASCII,UTF-8,UTF-16等,无法处理包蕴普通话字符的XML文书档案。从 http://xml.apache.org/xerces-c可以找到有关Xerces c++的详细消息。

  测试

  —->CppUnit

  二个c++的单元测试框架,能够透过派生测试类的方法,定制具体的测试方案。xUnit家族的一员,从JUnit移植而来,JUnit是Java语言的单元测试框架。从http://cppuint.sourceforge.net可以找到有关CppUint的详细信息。

  —->Rational ROBOT

  Rational的自动化测试工具,通过编写制定脚本的章程提供自动化测试特性。其GUI格局的脚本摄像成效,有助于对GUI软件拓展职能测试;其VU格局的本子录制成效,有助于测试有个别软件的数据通信作用。

  —->Rational Purify

  同样是Rational的自动化测试工具,不需求被测程序的源代码,可以用来检查内部存款和储蓄器访问错误、Windows API调用错误等,以成就软件的可信赖性测试,属于白盒测试。

  其余的Rational测试工具还包含:TestFactory、PureCoverage、TestManager等。 

  日志

  —->log4cpp

  2个用于日志记录的c++函数库,能够将内容以定制的点子记录到分化的目标地,比如:文件、控制台syslog等,同时还足以经过决定记录级别来屏蔽掉某个无关记录。从http://log4cpp.sourceforge.net可以找到有关log4cpp的详细信息。

  注释

  —->Doc++

  注释文书档案生成工具,根据源程序中的文书档案注释,能够出口TeX和HTML格式的文书档案。除了协理c/c++语言外,还辅助IDL和java。仅提供命令行使用办法。从http://docpp.sourceforge.net可以找到有关Doc++的详细信息。

  —->Doxygen

  注释文书档案生成工具,较之Doc++作用尤为完备,能够扭转让承包罗HTML、PDF、MuranoTF在内的有余格式的文书档案,并有GUI界面,除了补助c/c++语言外,还协理IDL、java、PHP、c#等。从http://www.stack.nl/~dimitri/doxygen可以找到有关Doxygen的详细信息。

 

stringtext
    : placeholderChar (placeholderChar)*
    | newlines
    ;

placeholderChar
    : CHAR
    | ':'
    | SPACE
    | NUMBER
    | DOT
    | '\''
    | '"'
    | '<'
    | '>'
    | '_'
    | '+'
    | '-'
    | '*'
    | '/'
    ;

newlines
    :NEWLINE NEWLINE*
    ;

NEWLINE:'\r'? '\n';
NUMBER: '0'..'9';
CHAR: 'a'..'z'|'A'..'Z';
SPACE:' ';
DOT:'.';

10 个免费的 C/C++ 集成开发条件

诚如一个一定的IDE是负担处理一种编制程序语言,但也有局地支撑多种编制程序语言的
IDE,例如 NetBeans,Microsoft Visual
Studio,MyEclipse,WinDev和Xcode等等。IDE
的大旨是提供了2个有力和不难使用的用来创作,修改,编写翻译,安排,调节和测试软件,并扩充开发职员的生产力的条件。
明天,大家将为程序员分享部分最棒的C和C++的免费IDE。
1) Codeblocks 
Code::Blocks (codeblocks)是多少个开源、免费、跨平台的c++
IDE。官方网站上称其能满意最苛刻的用户的需要。虽有些夸大,但既然敢那样说,也作证它的功用自然不差。可扩张插件,有插件向导成效,让你很便宜的始建
自个儿的插件。Code::Blocks是用c++编写的(用wxWidgets库),捆绑了MinGW编写翻译器。

2) kDevelop KDevelop-Project诞生于一九九七年,其目的是为KDE提供一个易用的并轨开发环境(Integrated
Development Environment)。此后,KDevelop IDE选取GPL进行发布, 它帮忙广大
程序设计语言.

3) Pellesc Pelles
C是一款windows下的C IDE,协理调节和测试,且为免费。
它有多个高效能的链接器,近期已被周边选拔为种种语言的后台链接器使用LCC作为编写翻译器
而且完全协理win32编制程序,援救别的API调用,包括全部winAPI的库且含有完整 C
Runtime Library。
4) Anjuta Anjuta是一个C/C++
IDE,它最大的特征是灵活,同时开辟八个公文,内嵌代码级的调节和测试器(调用gdb),应用程序向导(Application
widzards)能够方便的声援你创建GNOME程序而不须要您自个儿写一些与您感兴趣非亲非故的代码。
5) Bloodshed Dev-C++是一个Windows下的C和C++程序的合并开发环境。它应用MingW32/GCC编译器,服从C/C++标准。开发条件包含多页面窗
口、工程编辑器以及调节和测试器等,在工程编辑器中聚集了编辑器、编写翻译器、连接程序和施行顺序,提供高亮度语法展现的,以压压编辑错误,还有完美的调剂功效,能够适合初我们与编制程序高手的不等必要,是读书C或C++的首要选择开发工具!多国语言版中隐含简繁体普通话语言界面及技术唤起,还有韩语、菲律宾语、希腊语、丹麦语、意大利共和国语等二公斤个国家和地域语言提供选用。
6) Eclipse CDT Eclipse CDT 是 Eclipse
插件,它将把 Eclipse 转换为作用强大的 C/C++ IDE。它被设计为将 Java
开发职员喜爱的过多 Eclipse 卓绝功能提须求 C/C++
开发人士,例如项目管理、集成调试、类向导、自动构建、语法着色和代码落成。当
Eclipse 被看做 Java IDE 时,它将采纳 JDK 并与之集成。同样地,CDT
将运用标准的 C/C++ 工具并与之集成,例如 g++、make 和 GDB。那使得 CDT 在
Linux 中变得老大流行,那些工具都可在 Linux 中应用并用以当先58% C++
开发。能够在 Windows 上安装 CDT 以利用同一的工具。
7) Visual Mingw 
Visual-MinGW 是二个专门为MinGW所设计的IDE。假使,你早就用过VC++
6.0这些IDE,你的首先感到便是,Visual-MinGW和VC++
6.0卓殊相像。所以,对于早已用惯VC的敌人们的话,Visual-MinGW不失是二个好的挑选。可是,Visual-MinGW的开发与立异就像并
不积极。由此,还有不足的地点。Visual-MinGW的见地是提供1个飞快的,赶快的成立代码的IDE。
8) Ecere 
eCere,一门“新”的编制程序语言,以下简称为“eC”。
eC,是一位加拿大人jerome历时十二年开发的一门编写翻译型编制程序语言,拥有C++项指标习性、Java的跨平台性以及Python语法的简洁性。
不似Object
C、C++和C#,eC更像是三个C语言的Shell,他将程序员与C之间的复杂隔开开来,还有正是她在跨平台支持地点要更优越一些。eC不仅给守旧的
C语言引入了全部的OO编制程序完结,其真正有力之处在于小编如今所实现的C库,包罗2个内建的3D引擎完结(帮助Direct3D和
OpenGL)和一套接近于VB的GUI库完结以及对网络编制程序的扶助。
9) Relo 
Relo是3个支持开发人士钻探大型代码库的好工具,它亦可一步步的跟踪你所实行的代码包,并急忙变化类似UML的类图。
10) Ultimate++ U++是四个开源的跨平台C++
RAD平台,小编从98年就从头支付,到今年不断了十一年了。U++一直都以多个十分特别小众的开销平台,大约没什么人用,与现行反革命火红的多少个开源C++
Framewrok比如wxwidgets,
QT等相比较,它其实是被人冷落的能够。换做别人早就歇菜了,在SourceForge上搜一下,能搜出一堆半路夭折的C++Framework。而U++
却仍在频频的开发中,可到底特立独行。

 

 

stringtext

二选一的平整

率先行代表至少二个占位字符的字符串(前边用了*号,就表示字符数不限) 

newlines,看前面包车型地铁概念也是用了*号,代表3个回车,大概多个回车的规则匹配

占位符,我们看placeholderChar规则,就通晓允许的占位符是哪些字符了

 

小心:大写的条条框框其实不是规则,而是token

 

再来看看简单变量规则的定义

simple_variable
    :V_START simple_variable_inner V_END
    ;

simple_variable_inner
    :identity
    ;

identity
    :(UNDERLINE|CHAR) (UNDERLINE|CHAR|NUMBER)*
    ;

V_START:'@{';
V_END:'}';
NUMBER: '0'..'9';
CHAR: 'a'..'z'|'A'..'Z';
UNDERLINE: '_';

 

simple_variable

概念了多少个V_STALX570T的TOKEN为开端,也定义了总得以V_END为最终,字符分别是
 @{和},呵呵,中间正是特别变量名了

其一变量名其实就是identity规则的定义,是说第③个字符必须以下划线或英文字母初始,后续字符可有可无,有的话不能够不是下划线、英文字母、数字

 

再看看复合变量的规则

complex_variable
    :V_START complex_variable_inner V_END
    ;
complex_variable_inner
    :identity DOT identity
    ;

identity
    :(UNDERLINE|CHAR) (UNDERLINE|CHAR|NUMBER)*
    ;

DOT:'.';

 

说说这里的complex_variable_inner规则

是因为是要匹配obj.property格式,因而用了个点号DOT,obj和property的规则匹配其实便是identity的规则匹配 

 

作者们看看下面规则的机能,antlr解析树:

起名 1

抑或相比帅的

下边包车型客车标题是,怎么利用到C#项目中了 

 

怎么利用到C#项目中

率先,新建3个体系,然后在NuGet中检索”antlr” ,找到antlr4,然后安装

起名 2

 

然后新建八个自由文件,新建后重命名为g4文件,比如SimpleTemplate.g4,接着还要设置下那个g4文件的生成格局,如下图

起名 3

那般,当大家转移时,antlr就会基于g4文件的规则定义生成对应的C#代码了。

 

下一场再说说g4文书的剧情是怎么拷贝过来(原先的解析树是在eclipse中才能看的,所以本来的g4定义都在那边做的)

起名 4

率先,上方的grammar xxxxx;那里的xxxxx必供给和文件名称一致。

其次,compileUnit后边的要命规则,必须存在,代表暗中认可规则

再其次,如若编写翻译时总是报错(不过eclipse中是正规的),那时要修改下vs环境下的g4文件的编码,如下:

起名 5

 

还得把eclipse中的g4文件内容拷贝到新的g4文件中,别忘了。

 

接下去就要进入C#编码层面了,呵呵,是或不是有点不耐烦了,`(*∩_∩*)′

 

交流函数就那么贰个,极粗略,基本就是拷贝:

public static class STParser
    {
        public static string GenerateStringView(string template, Dictionary<string, object> variables)
        {
            Antlr4.Runtime.AntlrInputStream input = new Antlr4.Runtime.AntlrInputStream(template);
            TemplateLexer lexer = new TemplateLexer(input);

            Antlr4.Runtime.UnbufferedTokenStream tokens = new Antlr4.Runtime.UnbufferedTokenStream(lexer);
            TemplateParser parser = new TemplateParser(tokens);

            var tree = parser.parse();

            SimpleTemplateVisitor visitor = new SimpleTemplateVisitor(variables);

            string result=visitor.Visit(tree);

            return result;
        }
    }

 

template是传进来的模版文本

variables是传进来的变量集合

那段代码中都以antlr引擎自动生成的类,除了SimpleTemplateVisitor是自定义的(不然咋替换字符串啊)

来探望那么些类吧,里面都是VisitXXXX规则的函数重载,须求的自定义逻辑都在里面改写

class SimpleTemplateVisitor:g4.TemplateBaseVisitor<string>
    {
        private Dictionary<string, object> ctx;

        public SimpleTemplateVisitor(Dictionary<string, object> ctx)
        {
            this.ctx = ctx;
        }

        public override string VisitParse(g4.TemplateParser.ParseContext context)
        {
            StringBuilder sb = new StringBuilder();

            foreach(var exp in context.expression())
                sb.Append(VisitExpression(exp));

            return sb.ToString();
        }

        public override string VisitNewlines(g4.TemplateParser.NewlinesContext context)
        {
            return context.GetText();
        }

        public override string VisitStringtext(g4.TemplateParser.StringtextContext context)
        {
            return context.GetText();
        }

        public override string VisitSimple_variable(g4.TemplateParser.Simple_variableContext context)
        {
            return VisitSimple_variable_inner(context.simple_variable_inner());
        }

        public override string VisitComplex_variable(g4.TemplateParser.Complex_variableContext context)
        {
            return VisitComplex_variable_inner(context.complex_variable_inner());
        }

        public override string VisitSimple_variable_inner(g4.TemplateParser.Simple_variable_innerContext context)
        {
            string var_name = context.identity().GetText();

            if (!ctx.ContainsKey(var_name))
                throw new NullReferenceException(var_name);

            return Convert.ToString(ctx[var_name]);
        }

        public override string VisitComplex_variable_inner(g4.TemplateParser.Complex_variable_innerContext context)
        {
            string var_name = context.identity()[0].GetText();

            if (!ctx.ContainsKey(var_name))
                throw new NullReferenceException(var_name);

            string propertyName = context.identity()[1].GetText();

            object obj = ctx[var_name];

            Type t = obj.GetType();
            PropertyInfo propertyInfo = t.GetProperty(propertyName);

            var value = propertyInfo.GetValue(obj, null);

            string string_value = Convert.ToString(value);

            return string_value;
        }
    }

 

构造函数中传出的ctx是我们要替换的变量集合

光看那个函数是会晕的,你得结合eclipse中的解析树层次图来还要看,要明了的精晓上下关系,然后再套上面这些visit类才能看懂,呵呵,慢慢折腾看吗。

 

此处等待数周。。。

 

上边那一个只是替换变量的平淡,大家再做个有轮回的,比如:

your name: @{user.name}
your age: @{user.age}

1
2

3

@{repeat 5}
testing
@{end repeat}
---------------------
@{repeat count}
testing
@{end repeat}

 

看,援助了循环repeat语法

repeat后边能够支撑固定的数字,也能够扶助简单变量,也得以帮助复合变量,我们应该能在脑子里画出规则形状来吧。

起名 6

 

有趣味长远的校友可以协调试下完结if/else语法。

 

代码已经上传到github上了,url: https://github.com/daibinhua888/SimpleTemplate/

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图