源码地址在此
规则如下:

程序 -> 声明 语句序列
声明 -> 声明 ; {声明 };
声明 -> 特殊类型 变量列表
类型限定器 ->||串
变量列表 -> 识别器 {, 识别 }
语句序列 -> 语句 { ; 语句 }
语句 -> 如语句 | 重复语句 | 赋值语句 |读语句 | 写语句| 当语句
当语句 -> 当 极式 干 语句序列 结束
如语句 -> 如 极式 随后 语句序列 [异 语句序列] 结束
重复语句 -> 重复 语句序列 直到 极式
赋值语句 -> 标识符 := 式
读语句 -> 读 标识符
写语句 -> 写 式

式 -> 极式 | 串式
极式->或式
或式->和式 {或 和式}
和式->非式 {和 非式}
非式->非 式 ||| 比较式 
比较式->算术式 比较操作 算术式
比较操作-> > | < | = | >= | <= 

算术式->{ 加操作 项}
加操作->+ | -->因子 {乘操作 因子}
乘操作-> * | /
因子-> (算术式) | 数字 | 标识符
串式 ->|标识符

生成代码规则如下:

序列->S ; 序列1
S.下个=新标签
序列1.下个=序列.下个
序列.代码=S.代码 || 标签 S.下个||序列1.代码

序列->S	S.下个=序列.下个; 序列.代码=S.代码

S->重复 序列 直到 E	

S.开始 =新标签
序列.下个=新标签
E.=S.下个;
E.=S.开始;
S.代码=标签 S.开始 || 序列.代码 || 标签 序列.下个  || E.代码

S->如 E 随后 S1 结束 	
E.=新标签;
E.=S.下个
S1.下个=S.下个
S.代码=E.代码 || 生成(E.) || S1.代码

S->如 E 随后 S1 异 S2 结束	
E.=新标签;
E.=新标签
S1.下个=S.下个;  S2.下个=S.下个;
S.代码=E.代码 || 生成(E.) || S1.代码
生成('至',S.下个) 
|| 生成(E.|| S2.代码

S->当 E 干 S1 结束	
S.开始=新标签
E.=新标签
E.=S.下个
S.下个=S.开始
S.代码=生成(S.开始)|| E.代码 || 生成(E.)|| S.代码 || 生成('至' S.开始)

E->E1 或 E2	
E1.=E.真
E.=新标签
E2.=E.真
E2.=E.假
E.代码=E1.代码 || 生成(E.) || E.代码

E->E1 和 E2	
E1.=新标签
E1.=E.假
E2.=E.真
E2.=E.假
E.代码=E1.代码 || en(E1.代码) || E2.代码

E->不 E1 	

E.=E.假
E1.=E.真
E.代码=E1.代码

E->(E1)
E1.=E.真
E1.=E.假
E.代码=E1.代码

E->标识1 相对操作 标识2
E.代码=生成('如' 标识1.名 相对操作 标识2.'至' E.|| 生成('至' E.)
E->假	E.代码=生成('至' E.)
E->真	E.代码=生成('至' E.)