[关闭]
@yinnner 2018-09-26T02:17:12.000000Z 字数 2096 阅读 797

解释器构造实验

CMM语言

CMM(C Minus Minus/C- -)语言为C语言的一个子集,其基础定义如下:

保留字 特殊符号
if +
else -
while *
read /
write =
int <
real >
bool ==
<>
(
)
{
}
/*
*/
[
]
;
.

词法分析(EBNF)

类型 定义为
VarDeclaration ::= Type Identifier ";"
Type ::= Identifier
| BooleanType
| IntegerType
| RealType
| ArrayType
ArrayType ::= "int" "[" "]"
==(与Java类似)== | "real" "[" "]"
| "bool" "[" "]"
BooleanType ::= "bool"
IntegerType ::= "int"
Statement ::= Block
| AssignmentStatement
| ArrayAssignmentStatement
| IfStatement
| WhileStatement
| ReadStatement
| WriteStatement
Block ::= "{" ( Statement )* "}"
AssignmentStatement ::= Identifier "=" Expression ";"
ArrayAssignmentStatement ::= Identifier "[" Expression "]" "=" Expression ";"
IfStatement ::= "if" "(" Expression ")" Statement "else" Statement
WhileStatement ::= "while" "(" Expression ")" Statement
WriteStatement ::= "write" "(" Expression ")" ";"
ReadStatement ::= "read" "(" Expression ")" ";"
Expression ::= PlusExpression
| MinusExpression
| TimesExpression
| DivideExpression
| CompareExpression
| ArrayLookup
| ArrayLength
| PrimaryExpression
CompareExpression ::= PrimaryExpression "<" PrimaryExpression
| PrimaryExpression ">" PrimaryExpression
| PrimaryExpression "<>" PrimaryExpression
PlusExpression ::= PrimaryExpression "+" PrimaryExpression
MinusExpression ::= PrimaryExpression "-" PrimaryExpression
TimesExpression ::= PrimaryExpression "*" PrimaryExpression
DivideExpression ::= PrimaryExpression "/" PrimaryExpression
ArrayLookup ::= PrimaryExpression "[" PrimaryExpression "]"
ArrayLength ::= PrimaryExpression "." "length"
ExpressionList ::= Expression ( ExpressionRest )*
ExpressionRest ::= "," Expression
PrimaryExpression ::= IntegerLiteral
| RealLiteral
| TrueLiteral
| FalseLiteral
| BracketExpression
| Identifier
IntegerLiteral ::=
RealLiteral ::=
TrueLiteral ::= "true"
FalseLiteral ::= "false"
Identifier ::= \
BracketExpression ::= "(" Expression ")"

语法分析(EBNF)

语义分析(非形式化描述)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注