资源描述:
《java编写的c语言词法分析器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、这是java编写的C语言词法分析器,我将核心代码整理起来,准备放在QQ空间和博客上,目的是互相学习借鉴,希望可以得到高手改进。这个词法分析器实现的功能有打开文件、保存文件、打开帮助文档、文本域内容的剪切和复制和黏贴、进行词法分析程序的项目结构如图,Word类和Unidentifiable类是两个JavaBean类,存放的参数有两个row(整型)、word(String),row用于获取行数,word用于获取标识符,LexerFrame是词法分析器的界面类,Analyze封装了进行词法分析的核心代码,doc文件夹放一个帮助文档,当用户点击帮助按钮时可以弹出
2、来以帮助用户使用。//核心程序:packagecom.lexer;importjava.util.ArrayList;/***1~20号为关键字,用下标表示,i+1就是其机器码;21~40号为操作符,用下标表示,i+21就是其机器码;41~60号为分界符,* 用下标表示,i+41就是其机器码;用户自定义的标识符,其机器码为51;常数的机器码为52;不可以识别的标识符,其机器码为0*/ publicclassAnalyze{ //关键字 privateStringkeyword[]={"int","long","char","if","else","for
3、","while","return","break","continue", "switch","case","default","float","double","void","struct","static","do","short"}; //运算符 privateStringoperator[]={"+","-","*","/","%","=",">","<","!","==","!=",">=","<=","++","--","&","&&","
4、
5、","[","]"}; //分界符 privateStringdelimiter[]={"
6、,",";","(",")","{","}","'",""",":","#"}; publicAnalyze(){ } /** *判断是否是数字 */ publicbooleanisDigit(charch){ if(ch>='0'&&ch<='9'){ returntrue; }else{ returnfalse; } } /** *判断是否是字母的函数 */ publicbooleanisLetter(charch){ if((ch>='a'&&ch<='z')
7、
8、(ch>='A'&&ch<='Z')){ retur
9、ntrue; }else{ returnfalse; } } /** *判断是否由两个运算符组成 */ publicbooleanisTwoOperator(Stringstr,charch){ charlc; intflag=0; if(str.length()>1
10、
11、str.length()==0){//字符数大于2和无字符的情况 returnfalse; }else{//字符数等于2的情况 lc=str.charAt(str.length()-1); if(ch=='='&&(lc=='>'
12、
13、lc=='<'
14、
15、lc=
16、='='
17、
18、lc=='!')){ }elseif(ch=='+'&&lc=='+'){ }elseif(ch=='-'&&lc=='-'){ }elseif(ch=='
19、'&&lc=='
20、'){ }elseif(ch=='&'&&lc=='&'){ }else{ returnfalse;//否就返回false } returntrue;//其它符号的情况都返回true } } /** *获取关键字的机器码 */ publicintgetKeywordOpcodes(String
21、str){ inti; for(i=0;i22、ator[i])) break; } if(i