Assignment Week2-2

Created
Sep 13, 2024 06:06 AM

教材习题

notion image

PL/0词法分析伪代码

START: token = ""; GetNBC; REVERSE:=["const", "var", "procedure", "if", "then", "while", "do", "call", "begin", "end", "read", "write", "odd"]; SEPERATOR:=["+", "-", "*", "/", "(", ")", ";", ",", ":=", "=", "<", ">", "<=", ">=", "<>"]; CASE CHAR of 'a'...'z': BEGIN WHILE IsLeter OR IsDigit DO BEGIN CAT; getchar; END; UnGetCH; C:= SymbolOf(REVERSE); /* token如果等于其中某个identifier,则返回其Symbol*/ IF C=0 THEN RETURN("IdentifierSym", token); ELSE RETURN(C, -); END; '0'...'9': BEGIN WHILE IsDigit DO BEGIN CAT; getchar END; UnGetCH; RETURN ("IntSym",ATOI) END; '+': RETURN("PlusSym", -); '-': RETURN("SubtractSym", -); '*': RETURN("MultiplySym", -); '/': RETURN("DivideSym", -); '(': RETURN("LParSym", -); ')': RETURN("RParSym", -); '(': RETURN("LParSym", -); ';': RETURN("SemicolonSym", -); '=': RETURN("EqualSym", -); ',': RETURN('CommaSym', -); ':': BEGIN getchar; IF CHAR='=' THEN RETURN("AssignSym", -); ELSE UnGetCH; ERROR; END; '<': BEGIN getchar; CASE CHAR of '=': RETURN("LEQSym", -); '>': RETURN("NEQSym", -); END OF CASE; UnGetCH; RETURN("LTSym", -); END; '>': BEGIN getchar; IF CHAR='=' THEN RETURN("BEQSym", -); UnGetCH; RETURN("BTSym", -); END; ERROR; END OF CASE; GOTO START;