理解词法分析在编译程序中的做用ios
初步了解和掌握词法分析程序的实现方法和技术git
【实验内容】app
1. 编写程序,输入一串字符,判断该字符串是否为合法标识符或合法整型常量。spa
2. 无符号数的算术四则运算中的各种单词的识别。code
输入:由无符号数、+、-、*、/、(、)构成的算术表达式。blog
输出:对识别出的每一单词均单行输出。ci
如,输入:字符串
8*2.5-1.0e2input
则,输出:string
8
*
2.5
-
1.0e2
描述无符号数的肯定的、最小化的状态转换图如图1所示。其中编号1,2和6为终态,分别表明整数、小数和科学计数的识别结束状态。
图1 文法G[<无符号数>]的状态转换图
#include <iostream> #include <string> #include <ctype.h> using namespace std; int fun(char art) { if((art>='a'&&art<='z')||(art>='A'&&art<='Z')|| art == '_') { return 1; } else if(isdigit(art)) { return 1; } else { return 0; } } void main() { int count = 0; char string[20]; cin>>string; if(string[0]>='a'&&string[0]<='z' || string[0]>='A' && string[0]<='z') { for(int i=1;i<strlen(string);i++) { if(fun(string[i]) == 0) { cout<<"标识符不合法"<<endl; count = 1; } } if(count == 0) { cout<<string; cout<<"标识符合法"<<endl; } } else { cout<<"首字符要大写"<<endl; } }
import re a = input() b = list(a) str1 = list() #用来存放+ - * / 在b中的位置 str2 = ['+','-','*','/','(',')'] for index,i in enumerate(b): if i in str2: # c = [index,i] #将运算符的位置存入str1中 str1.append(i) l1 = re.split('[-,*,+,/,(,)]',a) for index,i in enumerate(l1): print(i) if index< len(l1)-1: print(str1[index])