C++编译器 词法 分析器

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.

  • 33
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译器词法与语法分析的实现(基于c++11) 编译器词法分析和语法分析是编译器构造中的两个关键步骤。词法分析器负责将源代码转换为一系列的词法单元(tokens),而语法分析器则将这些词法单元转换为抽象语法树(AST)。以下是一个基于C++11实现的编译器词法与语法分析器的项目介绍。 ### 项目介绍: **目标**:创建一个基于C++11的编译器,实现词法分析和语法分析。 **主要任务**: 1. **词法分析器**: - 定义词法规则,包括关键字、标识符、常数、运算符和分隔符等。 - 实现词法分析器,将源代码转换为词法单元序列。 - 处理词法错误,如非法字符或格式错误的数字。 2. **语法分析器**: - 定义语法规则,构建上下文无关文法(CFG)。 - 实现语法分析器,将词法单元序列转换为AST。 - 处理语法错误,如语法错误和类型错误。 **技术要求**: - 熟悉C++11编程语言。 - 了解编译原理中的词法分析、语法分析概念。 - 熟悉自动机理论、形式语言理论和抽象语法树。 **开发工具**: - C++11编译器,如GCC、Clang或MSVC。 - 代码编辑器或IDE,如Visual Studio、Code::Blocks或Eclipse。 ### 适合人员: - 计算机科学或相关领域的学生:此项目能够帮助他们实践编译原理和C++编程知识。 - 软件开发者:特别是那些对编译器和解释器如何工作感兴趣的程序员。 - 语言处理领域的研究者:此项目可以作为自然语言处理和编译技术的一个研究起点。 ### 额外建议: - 从一个简单的编程语言子集开始,逐步增加支持的语法和语义特性。 - 使用单元测试和集成测试来验证分析器的正确性。 - 编写详细的文档,记录设计决策、实现细节和测试结果。 - 考虑使用版本控制系统(如Git)来管理项目代码。 通过实现这样一个编译器开发者可以深入理解编译器的工作原理,提高C++编程技能,并为进一步学习编译原理和编程语言理论打下基础。此外,这个项目对于希望进入编译器设计、程序分析和代码生成等领域的人来说,是一个很好的实践机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值