福建农林大学计算机与信息学院
计算机类 课程设计报告
课程名称: 编译原理
课程设计题目: 语法分析器 姓 名:
系: 专 业: 年 级: 学 号: 指导教师: 职 称:
2014~2015学年第二学期
林旭文 软件工程 软件工程 2012级 3126016056 李小林 副教授
福建农林大学计算机与信息学院计算机类
课程设计结果评定
评语: 成绩: 指导教师签字: 任务下达日期: 评定日期:
目 录
1 正则表达式 ···························································································································1
1.1 正则表达式 ················································································································1
1.2 确定化(化简)后的状态转换图 ·················································································1 1.3 分析程序代码 ············································································································1 1.4 程序运行截图 ············································································································2 1.5 小结 ·····························································································································3 2 LL(1)分析 ·····························································································································4
2.1 LL(1)文法 ··················································································································4 2.2 LL(1)预测分析表 ······································································································4 2.3 分析程序代码 ············································································································4 2.4 程序运行截图 ············································································································6 2.5 小结 ···························································································································7 3 算符优先分析 ·······················································································································8
3.1 算符优先文法 ············································································································8 3.2 算符优先关系表 ········································································································8 3.3 分析程序代码 ············································································································8 3.4 程序运行截图 ·········································································································· 11 3.5 小结 ························································································································· 12 4 LR分析 ································································································································ 13
4.1 LR文法 ···················································································································· 13 4.2 LR分析表 ················································································································· 13 4.3 分析程序代码 ·········································································································· 13 4.4 程序运行截图 ·········································································································· 17 4.5 小结 ························································································································· 19 参考文献: ······························································································································· 19
1 正则表达式
1.1 正则表达式
(a*|b*)b(ba)*
1.2 确定化(化简)后的状态转换图
1.3 分析程序代码
import java.util.Scanner;
import java.util.regex.Matcher; import java.util.regex.Pattern;
public class Main {
public static void main(String[] args){ String a,b;
Scanner input = new Scanner(System.in);
System.out.println(\请先输入【正则表达式】再输入【符号串】\); while(input.hasNext()) { a = input.next(); b = input.next();
System.out.println(\符号串【\ + b + \】\ + work(a,b) + \正则表达式【\ + a + \】\); } }
private static String work(String a, String b) {
Pattern pattern = Pattern.compile(a);//将给定的正则表达式编译并赋予给Pattern类
Matcher matcher = pattern.matcher(b);//对输入的字串以该正则表达式为模开展匹配
return matcher.matches()?\满足 \:\不满足 \;//匹配检测 } }
1
#include
int m[100][255];//m[起点][路径]=终点 bool end[100]; void init() {
m[1]['a']=2; m[1]['b']=3; m[2]['a']=2; m[2]['b']=4; m[3]['b']=6; m[4]['b']=5; m[5]['a']=4; m[6]['a']=4; m[6]['b']=6;
end[3]=end[4]=end[6]=true; }
int main() {
puts(\本程序的正则表达式为(a*|b*)b(ba)*,请输入符号串\ string s; init(); cin>>s; int now=1;
for(int i=0;s[i];i++) now=m[now][s[i]]; if(end[now])
puts(\符合\ else
puts(\不符合\ return 0; }
1.4 程序运行截图
JAVA
C++
2