- Токен зөв эсэхийг шалгагч парсер бүтээх
Тайлбар:
- Лаб 2 дээрээ хийсэн кодон дээрээ суурилж хөгжүүлнэ.
- Нэмж Parser нэртэй класс зохион байгуулна.
- Parser класс нь дотроо лаб 2 дээр хийсэн Lexer классын объектыг бүрдмэл байдлаар агуулна. Мөн current_token гэх гишүүн өгөгдөлтэй байна. Уг current_token нь яг одоо боловсруулж буй токенг агуулна. this.current_token = this.lexer.next_token()
- Parser класс нь өөртөө match буюу тулгалт хийх гишүүн функцтэй байна. Уг функц нь одоогийн боловсруулж буй токенг ямар нэг өгөгдсөн токентой шалгана. Хэрэв зөв бол next_token функцийг дуудаж current_token гишүүн хувьсагчаа шинэчилнэ. Хэрэв таарахгүй бол алдаа заагаад програм хаагдах ёстой.
- Боловсруулах Си хэлний код нь include энэ тэр байхгүй шууд main функцаасаа эхлэх ба их бие нь хоосон байна.
- Тэгээд лаб 3 -ын main код дээрээ токенуудын зөв дараалал бүхий жагсаалт (Token төрлийн объект агуулах массив гэж ойлгож болно) үүсгээд тэрхүү дараалалтайгаа файлаас уншиж буй Си хэлний соорс кодыг шалгана. Буруу бол алдаа өгөөд хаагдах ёстой. Бүх токен зөв дараалалтай байвал амжилттай боллоо гэсэн утга хэвлээд төгсөнө.
Псевдо код:
import lab2.Lexer
import lab2.Token
class Parser():
Token current_token
Lexer lexer
function __baiguulagch__(Lexer lex):
this.lexer = lex
this.current_token = this.lexer.next_token()
function match(Token tok):
if this.current_token.value == tok.value:
this.current_token = this.lexer.next_token()
else:
print "Буруу токен байна"
print "Хүсч буй токен нь: ", tok.value
print "Файлаас уншсан токен нь: ", this.current_token.value
exit(1)
main():
Lexer lex
lex.set_file("cs205lab3.cpp")
Parser parser(lex)
int_tok = Token("keyword", "int")
main_tok = Token("keyword", "main")
left_paren_tok = Token("left_paren", "(")
right_paren_tok = Token("right_paren", ")")
left_brace = Token("left_brace", "{")
right_brace = Token("right_brace", "}")
headers = []
headers.append(int_tok)
headers.append(main_tok)
headers.append(left_paren_tok)
headers.append(right_paren_tok)
for head in headers:
parser.match(head)
parser.match(left_brace)
parser.match(right_brace)
print "Аз жаргалтай төгсгөл"
cs205lab3.cpp:
int main()
{
}
Хугацаа:
- VI долоо хоног
Багш: Ч. Эрдэнэбат
2014-10-7
No comments:
Post a Comment