学籍番号 学年 年 氏名 第 5 章 制約検査 (6/1〆切) レポート課題 解答例 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 は そ れ ぞ れ 変 数 名 ( 型 は INT と ARRAYOFINT のみ), 整数を表す終端記号とする。また、式の解析では左辺値の有無を 返り値として返すとする。 (ア) <Decl> ::= “int” NAME “;” void parseDecl() { if (token == “int”) token = nextToken(); else syntaxError(); if (token == NAME) { String name = (1) token.getName(); ; token = nextToken(); } else syntaxError(); if ((2) varTable.exist (name) ) syntaxError(“二重登録”); varTable.registerNewVariable ((3) Type.INT, name, 1 ); if (token.checkSymbol (Symbol.SEMICOLON)) token = nextToken(); else syntaxError(); } (イ) <Unsigned> ::= NAME | INTEGER boolean parseUnsigned() { if (token.checkSymbol (Symbol.NAME)) { String name = token.getName(); token = nextToken(); if ((4) !varTable.exist (name) ) syntaxError(“未定義”); q1 if ((5) A,B,...,Z !vatTalbe.checkTypea,b,...,z (name, Type.INT) ) syntaxError(“型不一致”); return (6) true ; } else if (token.checkSymbol (Symbol.INTEGER)) { q0 q2 a,b,...,z token = nextToken(); a,b,...,z return (7) false ; } else syntaxError(); }
© Copyright 2024 ExpyDoc