个人技术分享

wechat:help- assignment
price:800
你需要完成一个简单的C++风格的编译器。这个实验分为若干部分。在这个部分中,你需要完成该编译器的词法 分析器。
你的编译器不应当对用户输入程序进行假设(例如,假设用户输入的程序不超过若干字节,或每行不超过若干字
符,或程序不超过若干符号)。
给定一个C++语言源程序,你需要将其从字符流转换为词语流。具体来说,你需要过滤源程序中的空白符(空格, 注释、tab,回车、换行等),识别关键字、标识符、数字以及运算符。
输入为一段C++语言风格的源程序,输出每个单词所对应的类型。 若程序没有词法错误,输出为单词流以及每个单词的类型,每个单词以及类型占一行。
若程序有词法错误,直接输出相应的错误。一段源代码内同时有多个词法错误的,只输出最早出现的那个错误类
型。
输出的最后应该有换行。
假如只有/* 而没有匹配的 */,则认为从 /*往后的内容都是注释。 在词法分析中,注释的内容不应输出,即需要将这些内容过滤掉。 示例1
输入:
int a, b;
double c=1.2; // This is a comment scanf(a);
scanf(b);
printf©;
输出:
int INTSYM
a IDENT
, COMMA
b IDENT
; SEMICOLON
double DOUBLESYM
c IDENT
= AO
1.2 DOUBLE
; SEMICOLON
scanf SCANFSYM
( BRACE
a IDENT
) BRACE
; SEMICOLON
scanf SCANFSYM
( BRACE
b IDENT
) BRACE
; SEMICOLON
printf PRINTFSYM
( BRACE
c IDENT
) BRACE
; SEMICOLON

示例2:
输入:
int a = 6037210
int b = 06356417
输出:
Malformed number: Leading zeros in an integer.
示例3:
输入:
12910
1223.219
27912.120921
2181123.
2810.
12123
输出:
Malformed number: Decimal point at the beginning or end of a floating point number.
示例4:
输入:
int a,b;
c=2;
d=123.21;
? *~
输出:
Unrecognizable characters.
示例5:
输入:
12738
0.2919
.0199
1210
1.111
1.201
10291.1290
输出:
Malformed number: Decimal point at the beginning or end of a floating point number. 示例6:
输入:
1234
2222222
1928301
1.87273
0.9218
3.12919
1.0291
1.1.112182
21211
输出:
Malformed number: More than one decimal point in a floating point number.