Sample语言上下文无关文法
<表达式>:
<表达式>-<算术表达式>|<关系表达式>|<布尔表达式>|<赋值表达式>
<算术表达式>
<算术表达式> -> <算术表达式> + <项> | <算术表达式> - <项>|<项>
<项> -> <项>* <因子>|<项>/<因子>|<项>%<因子><因子>
<因子> -> (<算术表达式>)<常量>|<变量>|<函数调用>
<常量> -> <数值型常量><字符型常量>
<变量> -> <标识符>
<函数调用> -> <标识符>(<实参列表>)
<实参列表> -> <实参>|e
<实参> -> <表达式>|<表达式>,<实参>
<关系表达式>
<关系表达式> -> <算术表达式><关系运算符>算术表达式>
<关系运算符> -> > |<|>= l <= | == | !=
<布尔表达式>
<布尔表达式> -> <布尔表达式> || < 布尔项>|<布尔项>
<布尔项> -> <布尔项> && <布尔因子>|<布尔因子>
<布尔因子> -> <算术表达式>|<关系表达式>|!<布尔表达式>
<赋值表达式>
<赋值表达式> -> <标识符>=<表达式>
<语句>
<语句> -> <声明语句>|<执行语句>
<声明语句>
<声明语句> -> <值声明>|<函数声明>|e
<值声明> -> <常量声明>|<变量声明>
<常量声明> -> const <常量类型><常量声明表>
<常量类型> -> int | char | float
<常量声明表> -> <标识符> = <常量>;|<标识符> = <常量>,<常量声明表>
<变量声明> -> <变量类型><变量声明表>
<变量声明表> -> <单变量声明>;|<单变量声明>,<变量声明表>
<单变量声明> -> <变量>|<变量> = <表达式>
<变量类型> -> int | char | float
<函数声明> -> <函数类型><标识符>(<函数声明形参列表>);
<函数类型> -> int | char | float | void
<函数声明形参列表> -> <函数声明形参>|e
<函数声明形参> -> <变量类型>|<变量类型>,<函数声明形参>
<执行语句>
<执行语句> -> <数据处理语句>|<控制语>|<复合语>
<数据处理语句> -> <赋值语句>|<函数调用语句>
<赋值语句> -> <赋值表达式>;
<函数调用语句>-<函数调用>;
<控制语句> -> < if 语>|< for 语>|< while 语> | < do while 语> l < return 语句>
<复合语句> -> {<语句表>}
<语句表> -> <语句> | <语句><语句表>
< if 语句> -> if (<表达式>)<语句>| if (<表达式>)<语句> else <语句>
< for 语句> -> for (<表达式>;<表达式>;<表达式>)<循环语句>
< while 语句> -> while (<表达式>)<循环语句>
< do while 语句> -> do<循环用复合语> while (<表达式>);
<循环语句> -> <声明语句>|<循环执行语句> | <循环用复合语句>
<循环用复合语句> -> {<循环语句表>}
<循环语句表> -> <循环语句>|<循环语句><循环语句表>
<循环执行语句> -> <循环用 if 语句>|< for 语句>|< while 语句>< do while 语句><return语句>l< break 语句>l< continue 语句>
<循环用 if 语句> -> if (<表达式>)<循环语句>|if (<表达式>)<循环语句> else <循环语句>
<return 语句> -> return; | return <表达式>;
< break 语句> -> break;
<continue 语句> -> continue;
<函数定义>
<函数定义> -> <函数类型><标识符>(<函数定义形参列表>) <复合语句>
<函数定义形参列表> -> <函数定义形参>|e
<函数定义形参> -> <变量类型> <标识符>|<变量类型> <标识符>,<函数定义形参>
<程序>
<程序> -> <声明语句> main()<复合语句>函数块>
<函数块> -> <函数定义><函数块>|e