Skip to content

KanModel/PL0_Compiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 

Repository files navigation

本PL0编译器的EBNF表示:

  • <程序> ::= <分程序>.
  • <分程序> ::= [<常量说明部分>] [<变量说明部分>] [<数组说明部分>] [<过程说明部分>] <语句>
  • <常量说明部分> ::= const <常量定义> { ,<常量定义> };
  • <常量定义> ::= <标识符> = <无符号整数> | <字符常量>
  • <无符号整数> ::= <数字> {<数字>}
  • <字符常量> ::= ‘'’<字符>‘'’
  • <变量说明部分> ::= var <标识符> { , <标识符 > };
  • <数组说明部分> ::= array <标识符>‘[’<无符号整数>‘]’{‘[’<无符号整数>‘]’} { , array <标识符>‘[’<无符号整数>‘]’{‘[’<无符号整数>‘]’};
  • <标识符> ::= <字母> | _ { <字母> | <数字> | _ }
  • <过程说明部分> ::= <过程首部><分程序>{; <过程说明部分> };
  • <过程首部> ::= procedure <标识符> ;
  • <语句> ::= <赋值语句> | <条件语句> | <While循环语句> | <For循环语句> |<过程调用语句> | <读语句> | <写语句> | <字符打印语句> | <复合语句> | <自增减语句> | <空>
  • <赋值语句> ::= <标识符> := | += | -= | *= | /= | %= <表达式>
  • <复合语句> ::= begin <语句> {;<语句>} end
  • <条件> ::= <表达式> <关系运算符> <表达式> | odd <表达式> | !‘(’<条件>‘)’
  • <表达式> ::= [+ | - | ++ | --] <项> {<加法运算符> | % <项>}
  • <项> ::= <因子> {<乘法运算符><因子>}
  • <因子> ::= <标识符> | <无符号整数> | ‘(’<表达式>‘)’| <开方语句>
  • <开方语句> ::= sqrt ‘(’<表达式>‘)’
  • <加法运算符> ::= + | -
  • <乘法运算符> ::= * | /
  • <关系运算符> ::= = | # | < | <= | > | >=
  • <条件语句> ::= if <条件> then <语句> {else <语句>}
  • <过程调用语句> ::= call <标识符>
  • <While循环语句> ::= while <条件> do <语句>
  • <For循环语句> ::= for <赋值语句> to | until | downto <数字> {step <数字>} do <语句>
  • <读语句> ::= read ‘(’ <标识符> {,<标识符>} ‘)’
  • <写语句> ::= write | writeln ‘(’ <表达式> {, <表达式>} ‘)’
  • <自增减语句> ::= ++ | -- <标识符>
  • <字符打印语句> ::= print | println ‘(’ <表达式> | <字符串> {, <表达式> | <字符串>} ‘)’
  • <字符串> ::= ‘"’{<字符>}‘"’
  • <字母> ::= a | b | … | x | y | z
  • <数字> ::= 0 | 1 | 2 | … | 8 | 9
  • <字符> ::= <Unicode编码集>

About

PL0 Compiler improved version

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages