回 帖 发 新 帖 刷新版面

主题:哪位大哥大姐能帮我做个编译原理的课程设计吗?和词法语法分析器有关的

哪位大哥能好心的帮我做个课程设计吗?
要求如下啊,相关的也可以,谢谢了啊,我的QQ:17645040
课程设计目的:对C语言子集编制一个一遍扫描的词法、语法分析器,以加深对编译原理和编译方法的理解,掌握编译程序的实现方法和技术。
文法: 〈程序〉→ main()〈语句块〉
〈语句块〉→‘{’〈语句串〉‘}’
〈语句串〉→〈语句〉{;〈语句〉}
〈语句〉→〈赋值语句〉|〈条件语句〉|〈循环语句〉
〈赋值语句〉→ ID =〈表达式〉
〈条件语句〉→ if〈条件〉〈语句块〉
〈循环语句〉→ while〈条件〉〈语句块〉
〈条件〉→(〈表达式〉〈关系符〉〈表达式〉)
〈表达式〉→〈项〉{+〈项〉|-〈项〉}
〈项〉→〈因子〉{*〈因子〉|/〈因子〉}
〈因子〉→ ID | NUM |(〈表达式〉)
〈关系符〉→<|<=|>|>=|=|<>
一、词法分析
设计、编制并调试一个词法分析子程序,完成识别语言单词的任务;加深对词法分析原理的理解。
1.    语言单词符号种别码
单词符号    种别码    单词符号    种别码    单词符号    种别码
main    1    -    23    ;    34
int    2    *    24    >    35
char    3    /    25    <    36
if    4    (    26    >=    37
else    5    )    27    <=    38
for    6    [    28    ==    39
while    7    ]    29    !=    40
ID    10    {    30    ‘\0’    1000
NUM    20    }    31    ERROR    -1
=    21    ,    32        
+    22    :    33        
2.    词法分析子程序的功能
输入:所给文法源程序的字符串
例如:
main()
{
    i=10;
while(i>0) i=i-1
        }
    输出:二元组(syn,token或Dtb)构成的序列。
例如:(1,main),(26,( ),(27,)),(30,{),……
要求:有一定的查错能力,并且给出错误的行号
①.    读入非法字符
②.    整数>32767
3.    词法分析程序的主要算法思想
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
①.    主程序示意图
主程序示意图如下图所示。
其中初值包括如下两方面。
⑴.    关键字表初值
关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。
⑵.    程序中需要用到的主要变量:syn,token和dtb。
②.    扫描子程序的算法思想
首先设置三个变量:token用来存放构成单词符号的字符串;sum用来存放整型单词;syn用来存放单词符号的种别码。扫描子程序的主要部分流程图如下图所示。

二    语法分析
设计、编制、调试一个语法分析程序,并用它对词法分析程序所提供的单词序列进行语法检查和结构分析。
输入:词法分析后的单词串
输出:若输入串是文法的句子,则输出语法分析成功,否则,给出错误的行号,错误的性质。

回复列表 (共1个回复)

沙发

我很久没看编译原理了
这段时间很忙,不好意思.

我来回复

您尚未登录,请登录后再回复。点此登录或注册