编译原理上机 实验1 简单的词法分析子程序

理解词法分析在编译程序中的作用

 初步了解和掌握词法分析程序的实现方法和技术

【实验内容】

1. 编写程序,输入一串字符,判断该字符串是否为合法标识符或合法整型常量

2. 无符号数的算术四则运算中的各类单词识别。

输入:无符号*/、(、)构成的算术表达式

输出:对识别出的每一单词均单行输出

输入:

8*2.5-1.0e2

则,输出:

8

*

2.5

-

1.0e2

描述无符号数的确定的、最小化的状态转换图如图1所示。其中编号126为终态,分别代表整数、小数和科学计数的识别结束状态。

 

 

 

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])

 

 

posted @ 2019-11-04 19:48  池塘之底  阅读(2533)  评论(0编辑  收藏  举报