词法分析器、语法分析器(LL(1)分析法和递归下降子程序法)C\C++实现

本文介绍了使用C/C++实现词法分析器和语法分析器的方法,包括LL(1)分析法和递归下降子程序法。内容涵盖编译课程实验作业,提供了相关代码实现。
摘要由CSDN通过智能技术生成

&词法分析器、语法分析器(LL(1)分析法和递归下降子程序法)C\C++实现(编译课实验作业,原理和方法就不再赘述了,不太清楚的伙伴可以看看书上的讲解以及大佬的总结,直接上代码吧,如果有不妥之处,还请指正)

词法分析器

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
string keyword[19]={"if","else","while","do","for","switch","case","float","double","long","char","string","int","void","main","include","defined","cstdio","return"};//关键字表
int keyNum[19]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};//关键字序号
string symbol[21]={"<",">","!=",">=","<=","==",",",";","(",")","{","}","[","]","!","+","-","*","/","=","#"};//运算符和界符表
int symbolNum[21]={20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40};//运算符和界符序号
string letter[500];
string words[500];
int size; //保存程序中字符的数目
int num;
//判断是否为关键字,是则返回对应的序号
int isKeyWord(string s){
 for(int i=0;i<=18;i++){
  if(s==keyword[i])
   return keyNum[i];
 }
 return 0;
}
//判断是否运算符和界符,是则返回对应序号
int isSymbol(string s){
 for(int i=0;i<=20;i++){
  if(s==symbol[i])
   return symbolNum[i];
 }
 return 0;
}
//判断是否为数字
bool isNum(string s){
 if(s>="0" && s<="9")
   return true;
 else
   return false;
}
//判断是否为字母
bool isLetter(string s)
{
 if((s>="a" && s<="z")||(s>="A" && s<="Z"))
   return true;
 else
   return false;
}
//对字符类型进行分类,方便后续处理
int wordType(string str){
 if((str>="a" && str<="z")||(str>="A" && str<="Z"))
  return 1;
 if(str>="0" && str<="9")
  return 2;
 if(str==">"||str=="="||str=="<"||str=="!"||str==","||str==";"||str=="("||str==")"||str=="{"||str=="}"
  ||str=="+"||str=="-"||str=="*"||str=="/"||str=="["||str=="]"||str=="#") //判断运算符和界符
  return 3;
}
string identify(string s,int n){
 int j=n+1;
 int flag=1;
 while(flag){
  if(isNum(letter[j]) || isLetter(letter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值