- Соорс кодноос зарлагдсан хувьсагчуудыг илрүүлж сурах
Тайлбар:
- Тухайн токенг төрлийнх эсэхийг шалгадаг is_type() функцийг бичих хэрэгтэй
- Зарлагаа нь дараах бүтэцтэй байна гэж тооцоолж кодоо бичих хэрэгтэй --> Type Identifier { , Identifier }; Жишээ нь:
- float f;
- int i, k;
- char c;
- Тухайн нэг зарлагааг боловсруулах declaration() гэдэг функцийг бич.
- Зарлагааг агуулах Declaration гэдэг класс бичиж холбогдох кодуудыг нь бич.
- Энэхүү зарлагааг таниж боловсруулах код нь өмнөх лаб дээр хийсэн Parser класс дотор байршина.
Псевдо код:
class Declaration:
variable_name
value
function __baiguulagch__(var, val):
this.variable_name = var
this.value = val
function to_string():
print "Variable: ", this.variable_name
print "Type: ", this.value
class Parser:
...
List declarations
function process_declarations():
while this.is_type() and this.current_token is not EOF:
this.declaration()
this.current_token = this.lexer.next_token()
function is_type():
if this.current_token is int or bool or char or float:
return true
else:
return false
function match(Token tok):
value = this.current_token.value
if this.current_token.type equals tok.type:
this.current_token = this.lexer.next_token()
else:
print "Буруу токен байна"
print "Хүсч буй токен нь: ", tok.type
print "Файлаас уншсан токен нь: ", this.current_token.type
print "Би явлаа баяртай, битгий араас дуудаарай"
system.exit(1)
return value
function declaration():
dec_type = this.current_token.value
while this.current_token is not semicolon:
this.current_token = this.lexer.next_token()
Token identifier_tok = Token("identifier", "")
variable_name = this.match(identifier_tok)
this.declarations.append(Declaration(variable_name, dec_type))
while this.current_token is comma:
this.current_token = this.lexer.next_token()
var_name = this.match(new Token("identifier", ""))
this.declarations.append(Declarations(var_name, dec_type))
this.match(semicolon_token)
function print_declarations():
for dec in this.declarations:
dec.to_string()
main():
...
parser.lexer.set_file("cs205lab4.cpp")
parser.process_headers()
parser.match(left_brace)
parser.lexer.set_file("cs205lab4.cpp")
parser.process_headers()
parser.match(left_brace)
parser.process_declarations()
parser.match(right_brace)
parser.match(right_brace)
parser.print_declarations()
print "алдаа заасангүй, би лаб 4 -өө хийчлээ"
print "lab4 дуусав."
print "lab4 дуусав."
cs205lab4.cpp:
int main()
{
float f;
int i, k;
char c;
}
Хугацаа:
- VII долоо хоног
Багш: Ч. Эрдэнэбат
2014-10-14
No comments:
Post a Comment