词法分析
从左到右扫描源程序,确定单词类型,将识别的单词转换为token
token:<种编码,属性值>
种编码本质是int类型
EBNF 元符号含义
<>
用尖括号括起来的中文字表示语法构造成分,或称语法单元;而用尖括号括起来的英文字表示一类词法单元。
::=
表示左部的语法单位由右部定义,可读作“定义为”。
{}
用花括号括起来的成分可以重复0次到任意多次。
[]
用方括号括起来的成分为任选项,即出现一次或不出现。
语法单位组成
<程序> ::= <分程序><br>
<分程序> ::= [<常量说明部分>;][<变量说明部分>;]<br> {<过程说明部分>;}<语句部分>
<常量说明部分> ::= const<常量定义>{,<常量定义>}
<常量定义> ::= <标识符>=<无符号整数>
<无符号整数> ::= <数字>{<数字>}
<变量说明部分> ::= var<标识符 >{,<标识符>}
<标识符> ::= <字母>{<字母>|<数字>}
<过程说明部分> ::= <过程首部><分程序>
<过程首部> ::= procedure<标识符>
<语句部分> ::= <语句>|<复合语句>
<复合语句> ::= BEGIN<语句>{;<语句>}END
<语句> ::= <赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<br> <读语句>|<写语句>|<复合语句>|<空语句>
<赋值语句> ::= <标识符>:=<表达式>
<条件> ::= <表达式><关系运算符><表达式>|ODD<表达式>
<表达式> ::= [+|-]<项>{<表达式><加法运算符><项>}
<项> ::= <因子>|<项><乘法运算符><因子>
<因子> ::= <标识符>|<常量>|(<表达式>)
<常量> ::= <无符号整数>
<加法运算符> ::= + | -
<乘法运算符> ::= * | /
<关系运算符> ::= <|>|<|>=|<=|=
<条件语句> ::= if<条件>then<语句><br>
<过程调用语句> ::= call<标识符><br>
<当型循环语句> ::= while<条件>do<语句>
<读语句> ::= read(<标识符>{,<标识符>})
<写语句> ::= write(<表达式>{,<表达式>})
<字母> ::= a|b|c···|z<br>
<数字> ::= 0|1|2···|9