语言
词法
letter→[a−zA−Z]digit→[0−9]number→digit+constInt→numbertrue→truefalse→falseconstString→"(char∣digit)∗"constFloat→number.numbervoid→voidreturn→returninteger→integerif→ifelse→elseelseif→elseiffor→forfunction→functionfunc→func==→==!=→!=<=→<=<→<>=→>=>→>+→+−→−∗→∗/→/∣→∣&→&!→!:=→:=(→()→)[→[]→]{→{}→};→;id→letter(letter∣digit)∗
语法
程序
程序开始Program→BracedCodeBlockProgram→ϵ
代码块
大括号括起来的代码块BracedCodeBlock→{StatementList}非空代码块NonNullCodeBlock→Statement代码块中的单个语句Statement→DefineStatement→AssignOrFuncCallStatement→ControlStatement→BracedCodeBlock赋值或函数调用语句AssignOrFuncCall→IdAssignOrFuncCallSuf;AssignOrFuncCallSuf→AssignSufAssignOrFuncCallSuf→FuncCallSufAssignSuf→:=ValueExpr代码块中的语句集合StatementList→StatementStatementListStatementList→ϵ
定义语句
定义语句,包含变量定义和函数定义,可以在定义时初始化(赋值)Define→TypeVarDef变量或者函数定义,可以初始化VarDef→IdVarInitVarDef→funcId(FuncArgListDef)BracedCodeBlock标识符Id→identifier变量也可能是函数,直接使用值表达式赋值VarInit→AssignSuf;VarInit→;函数参数列表定义FuncArgListDef→FuncArgDefFuncArgListDefSufFuncArgListDef→ϵFuncArgListDefSuf→,FuncArgDefFuncArgListDefSufFuncArgListDefSuf→ϵFuncArgDef→TypeId数据类型定义,包括基础类型,数组类型和函数类型,函数的返回类型可以为voidType→BaseTypeTypeSufType→VoidFuncTypeTypeSufTypeSuf→function(FuncArgTypeDef)TypeSufTypeSuf→ϵ基础数据类型定义BaseType→intBaseType→boolBaseType→floatBaseType→string函数类型VoidFuncType→voidfunction(FuncArgTypeDef)函数参数类型定义,参数可以没有或者有多个FuncArgTypeDef→TypeFuncArgTypeDefSufFuncArgTypeDef→ϵFuncArgTypeDefSuf→,TypeFuncArgTypeDefSufFuncArgTypeDefSuf→ϵ
值语句
值语句,第一层是逻辑计算ValueExpr→LogicItemLogicExprSufLogicExprSuf→∣LogicItemLogicExprSufLogicExprSuf→ϵLogicItem→LogicFactorLogicItemSufLogicItemSuf→&LogicFactorLogicItemSufLogicItemSuf→ϵLogicFactor→!RelExprLogicFactor→RelExpr关系表达式RelExpr→ArithExprRelExprSufRelExprSuf→RelOpArithExprRelExprSufRelExprSuf→ϵ二元关系运算符RelOp→<RelOp→>RelOp→<=RelOp→>=RelOp→==RelOp→!=算术表达式ArithExpr→ArithItemArithExprSufArithExprSuf→−ArithItemArithExprSufArithExprSuf→+ArithItemArithExprSufArithExprSuf→ϵArithItem→PrimExprArithItemSufArithItemSuf→∗PrimExprArithItemSufArithItemSuf→/PrimExprArithItemSufArithItemSuf→ϵ基础数据表达式PrimExpr→(ValueExpr)PrimExpr→FuncInlineDefinePrimExpr→ConstPrimExpr→IdFuncCallSuf常量Const→constIntConst→constFloatConst→constStringConst→trueConst→falseConst→null函数调用FuncCallSuf→(FuncCallArgs)FuncCallSuf→epsFuncCallArgs→ValueExprFuncCallArgsSufFuncCallArgs→ϵFuncCallArgsSuf→,ValueExprFuncCallArgsSufFuncCallArgsSuf→ϵ行内函数定义FuncInlineDefine→Type(FuncArgListDef)=>BracedCodeBlock
控制语句
控制语句Control→Break;Control→Continue;Control→Return;Control→IfControl→Loop退出循环Break→break下一次Continue→continue返回Return→returnRetValue返回值RetValue→ValueExprRetValue→ϵ
If 语句
if语句If→if(ValueExpr)BracedCodeBlockElseif条件为假时执行的语句Else→ElseIfListEndElseelseif语句列表ElseIfList→ElseIfElseIfListElseIfList→ϵelseif语句ElseIf→elseif(ValueExpr)BracedCodeBlockelse语句EndElse→elseBracedCodeBlockEndElse→ϵ
循环语句
循环语句Loop→ForLoop
For 循环
For循环ForLoop→for(ForInit;ForCondition;ForUpdate)ForBodyFor初始化ForInit→ForInitListForInit→ϵ变量列表初始化ForInitList→ForAssignOrDefineForInitListSufForInitListSuf→,ForAssignOrDefineForInitListSufForInitListSuf→ϵForAssignOrDefine→TypeIdAssignSufForAssignOrDefine→IdAssignSufFor执行条件ForCondition→ValueExprForCondition→ϵFor更新ForUpdate→ForInitListForUpdate→ϵFor循环体ForBody→BracedCodeBlock