if (token.chec

学籍番号
学年
年
氏名
第 5 章 制約検査 (5/30〆切)
レポート課題
1. 以下の式で左辺値を持つものを全て選べ
(1)
abc
(2)
main
(3) a+b
(4) x12
(7)
a[12]
(8) a[12+24] (9) a[12]+b[24] (10)
(a)
(5)
(11)
main12 (6)
-b
a [b*c] (12) ++i
2. 以下に示す制約検査プログラム(の一部)の、空欄(1)~(7)に当てはまる命令を記入せよ。
ただし、Token 型変数 token には現在解析中のトークン、VarTable 型変数 varTable に
は変数表が入っているとし、NAME, INTEGER はそれぞれ変数名, 整数を表す終端記号
とする。また、式の解析では左辺値の有無を返り値として返すとする。
(ア) <Decl> ::= “int” NAME “;”
void parseDecl() {
if (token.checkSymbol (Symbol.INT)) token = nextToken(); else syntaxError();
if (token.checkSymbol (Symbol.NAME)) {
String name = (1)
;
token = nextToken();
} else syntaxError();
if ((2)
) syntaxError(“二重登録”);
varTable.addElement ((3)
);
if (token.checkSymbol (Symbol.SEMICOLON) token = nextToken(); else syntaxError();
}
(イ) <Unsigned> ::= NAME | INTEGER
boolean parseUnsigned() {
if (token.checkSymbol (Symbol.NAME)) {
String name = token.getStrValue();
token = nextToken();
if ((4)
q1
else if ((5)
a,b,...,z
A,B,...,Z
return (6)
} else if (token.checkSymbol (Symbol.INTEGER)) {
q0
q2
a,b,...,z
a,b,...,z
token = nextToken();
return (7)
} else syntaxError();
}
) syntaxError(“未定義”);
) syntaxError(“型不一致”);
;
;