设计方法 对SysY语法进行分析如下: (1) 保留字: if else for while do continue return break int const main void 注意:所有关键词都是小写的。 (2) 标识符ID,与标准C语言一致,即:以下划线或字母开头的字母数字下划线组成的符号串。 (3)运算符和分界符: +、-、*、/、% 、==、!=、<、>、<=、>= 、!、&&、|| 、(、)、{、}、[、]。 (4) 空白符包括空格、制表符和换行符,用于分割标识符、保留字、运算符和分界符,词法分析阶段要忽略空白符。 本程序使用Java编写 程序启动输入后,字符串保留在instr中。先对字符串进行预处理,去除两个词之间多余的空格,再按空格进行切割。切割完成后逐个单词进行判断,分别判断是否属于保留字、数字、运算符和分界符等等,如果匹配成功则输出。每次判断时使用token逐个读取字符串的各个字符直到一个单词结束并且进行判断。
package cn.hdu;import java.util.HashMap;import java.util.Map;import java.util.Scanner;publicclassWord{
//1.词法分析程序publicstaticbooleanIsLetter(char ch){
if((ch >='a'&&ch <='z')||(ch >='A'&&ch <='Z'))returntrue;returnfalse;}//判断是否为数字publicstaticbooleanIsDigit(char ch){
if(ch >='0'&&ch <='9')returntrue;returnfalse;}//判断是否为分界符publicstaticintIsSymbol(char ch){
char symbol[]={
'(',')',',',';','<','>','{','}','[',']'};for(int i =0; i <8; i++){
if(ch == symbol[i])return i;}return-1;}//判断是否为关键字publicstaticintIsKeyword(String str){
String keyword[]={
"if","else","for","while","do","continue","return","break","int","const","main","void"};for(int i =0; i < keyword.length; i++){
if(str.equals(keyword[i])){
return i;}}//不是关键字即为标识符return30;}publicstaticbooleanIsRight(String str){
char[] chars = str.toCharArray();// System.out.println(chars.length);int f =0;//for (int i = 0; i < str.length()-1; i++)//{
/* if (IsLetter(chars[i]) ||"_".equals( chars[i]))
f=1;*/if(
实验目的与内容对SysY语言进行词法分析,可以查出语言中可能包含的词法错误。从控制台输入字符串,如有出错则输出错误,没有错误则按照二元组的方式输出设计方法对SysY语法进行分析如下:(1) 保留字: if else for while do continue return break int const main void 注意:所有关键词都是小写的。(2) 标识符ID,与标准C语言一致,即:以下划线或字母开头的字母数字下划线组成的符号串。(3)运算符和分界符: +、-、*、/、% 、=.