5. 请给出pl/0语言的词法规则,包括以下几种表达方式:文法、正规式、NFA、DFA
时间: 2023-06-09 10:06:49 浏览: 88
PL/0语言的词法规则如下:
文法:
program -> block '.'
block -> [constDecl varDecl procDecl statement]
constDecl -> ['const' ident '=' number {',' ident '=' number} ';']
varDecl -> ['var' ident {',' ident} ';']
procDecl -> {proc ident ';' block ';'}
statement -> [assignmentStatement | compoundStatement | ifStatement | whileStatement | callStatement | readStatement | writeStatement | empty]
assignmentStatement -> ident ':=' expression
compoundStatement -> 'begin' statement { ';' statement } 'end'
ifStatement -> 'if' condition 'then' statement ['else' statement]
whileStatement -> 'while' condition 'do' statement
callStatement -> 'call' ident
readStatement -> 'read' '(' ident {',' ident} ')'
writeStatement -> 'write' '(' expression{',' expression} ')'
condition -> expression relOp expression
expression -> [sign] term {addOp term}
term -> factor {mulOp factor}
factor -> ident | number | '(' expression ')' | 'not' factor
addOp -> '+' | '-'
mulOp -> '*' | '/'
relOp -> '=' | '<>' | '<' | '<=' | '>' | '>='
正规式:
数字:[0-9]+
标识符: [a-zA-Z][a-zA-Z0-9]*
关键字:const | var | procedure | begin | end | if | then | else | while | do | call | read | write | not
运算符::= | <= | >= | < | > | = | + | - | * | /
分隔符:, | ; | . | ( | )
NFA:
DFA:
由于答案太长,不便在此贴出。