Skip to content

cnissnzg/CompileLab

 
 

Repository files navigation

reend.txt 是关键字和终结符集合

XXXXXDFA.txt 命名规范

dfa撰写规范,请保证读入的是一个dfa

n m                            #n是状态数,m是转移数,状态编号从0开始
start                          #start是起始状态编号
cnt end[1] end[2] ... end[cnt] #表示若干个终结状态的编号
#接下去m行 , 每行3个元素 (from,to,tran) from , to 都是编号 , tran是接受字符的ascii码,
#其他终结符请到reend里面找对应的编号

win

g++ main.cpp -o main --std=gnu++17
main

linux/mac

g++ main.cpp -o main --std=c++17
./main

语法分析

规则存放于generator.txt:

格式为xxxx -> yyyyy $ zzzzz ​$ #

$表示“或”,#表示行结尾,none表示空

经过转化后必须能表示成LL(1)文法,否则报错

program:程序体,开始符号,包含声明和语句两部分

block:与程序体类似,包裹在大括号内

decls:声明部分

decl:声明语句,包括变量声明和函数声明,注意变量声明时不能初始化

def:函数定义

cal:函数调用

basic:四种变量类型

type:复合类型,如int[2][2][2]这样

stmts:语句部分

stmt:语句,包括函数调用,赋值,判断,循环,break,代码块,注意if和else中不能嵌套else

noelse:和语句含义一样,但是不能用else

loc:左值,用于赋值语句

bool:可以解析为布尔值的表达式

join:不包含或的表达式

equality:不包含或、与的表达式

rel:不包括或、与、相等的表达式

expr:不包括或、与、相等、大于小于的表达式

term:不包括或、与、相等、大于小于、加减的表达式

unary:不包括或、与、相等、大于小于、加减乘除的表达式

factor:最小的表达式单元

About

编译原理实验代码

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 99.3%
  • Other 0.7%