4.3.2. Sơ lược về ngôn ngữ Q
4.3.2.1. Kiểu dữ liệu.
Ngôn ngữ Q hỗ trợ các kiểu dữ liệu sau:
Kiểu dữ liệu Mô tả Ví dụ
inthoặc songuyen Kiểu số nguyên 1234, -12
realhoặc sothuc Kiểu số thực 3.14, -0.1
complexhoặc sophuc Kiểu số phức (0, 1), (-1,2.3)
boolean Kiểu logic true, false hoặc
dung, sai
qureghoặc thanhghiluongtu Kiểu thanh ghi lƣợng tử
quconst hoặc hangsoluongtu Kiểu hằng số lƣợng tử
4.3.2.2. Hằng số.
Đối với hằng số, chúng ta khai báo nhƣ sau:
const-def constidentifier =expr;
Chú ý: đây là khai báo hằng số đối với các kiểu cổ điển (không phải kiểu lƣợng tử), đối với hằng số lƣợng tử chúng ta sử dụng khai báo biến với kiểu
quconst hoặc hangsoluongtu
4.3.2.3. Biến số.
Đối với khai báo biến số, chúng ta khai báo nhƣ sau:
var-def typeidentifier [= expr] ;
Nếu không có expr thì biến đƣợc khai báo sẽ mang giá trị 0, "", false (đối với kiểu số, chuỗi, logic tƣơng ứng.
4.3.2.4. Toán tử.
Ngôn ngữ Q hỗ trợ các toán tử sau:
Toán tử Mô tả Kiểu dữ liệu
# Độ lớn thanh ghi lƣợng tử kiểu lƣợng tử
^ Luỹ thừa
Luỹ thừa nguyên
các kiểu số
int
- âm hoặc phép trừ các kiểu số
* phép nhân các kiểu số
/ phép chia các kiểu số
mod phép lấy phần dƣ int
+ phép cộng các kiểu số
lƣợng tử
== phép so sánh bằng kiểu số, string != phép so sánh khác kiểu số, string
< phép so sánh nhỏ hơn int, real
<= phép so sánh nhỏ hơn hoặc bằng int, real
> phép so sánh lớn hơn int, real
>= phép so sánh lớn hơn hoặc bằng int, real
not hoặc khong toán tử not boolean
and hoặc va toán tử and boolean
or hoặc hoac toán tử or boolean
xor toán tử xor boolean
Các toán tử này sử dụng tƣơng tự nhƣ trong ngôn ngữ C Ví dụ:
hienthi 2 + 2; // kết quả hiển thị là 4
neu (2>1) va (3+4>5) thi {hienthi "dung";} nguoclai {hienthi "sai";}
4.3.2.5. Hàm (Function).
Ngôn ngữ Q hỗ trợ các hàm xây dựng sẵn hoặc các hàm do ngƣời sử dụng xây dựng.
Một số hàm toán học đƣợc hỗ trợ bởi ngôn ngữ Q:
Tên hàm Mô tả
sin(x), cos(x), tan(x), cot(x) sin , cos, tang, cotang của x
sinh(x), cosh(x), tanh(x), coth(x) Các hàm hyperbol của x
Re(z), Im(z) Hàm lấy phần thực và phần ảo của z
abs(z) Trả về (Re(z))2 +(Im(z))2
conj(z) Trả về số phức liên hợp với z
exp(x) ex với e = 2.71828
log(x) Logarithm tự nhiên của x
log(x, n) Logarithm cơ số n của x
sqrt(x) Căn bậc hai của x
(0,1)
gcd(a,b,...) Ƣớc số chung lớn nhất của a, b, ...
lcd(a,b,...) Bội số chung nhỏ nhất của a, b, ...
min(a,b,...) Giá trị nhỏ nhất
max(a,b,...) Giá trị lớn nhất
4.3.2.6. Một số lệnh cơ bản của ngôn ngữ Q.
Trong phần này, một block đƣợc định nghĩa là
block { stmt {stmt} }
trong đó stmt là mệnh đề, đƣợc định nghĩa chính xác tại phụ lục A.
a. Lệnh gán.
Lệnh gán sử dụng dấu = , trong đó vế phải phải cùng kiểu với kiểu của biến ở vế trái.
b. Lệnh gọi hàm.
stmt identifier ([ expr {, expr} ]) ;
c. Lệnh nhập dữ liệu.
Để nhập dữ liệu, chúng ta dùng lệnh input hoặc nhapvao hoặc nhap vao. Ví dụ
songuyen n;
input “Nhap vao so n = ”, n
nhapvao “Nhap vao so n = ”, n
nhap vao “Nhap vao so n = ”, n
d. Lệnh hiển thị dữ liệu
Để hiển thị dữ liệu chúng ta dùng lệnh print hoặc hienthi hoặc hien thi
Ví dụ
hien thi “Hello World!”
e. Lệnh kiểm tra điều kiện if
stmt if exprblock [else block]
neu exprthi block [nguoclaiblock] neu exprthi block [nguoclai block]
f. Lệnh lặp for
stmt for identifier = exprfromtoexprto[step exprstep] block
lap identifier = exprfromtoiexprto[buocnhay exprstep] block lap identifier = exprfromtoiexprto[buoc nhay exprstep] block
g. Lệnh lặp repeat
stmt whileexpr block block untilexpr ;
batdaulap blockchodenkhiexpr
bat dau lapblockcho den khiexpr
h. Khai báo hàm và thủ tục
proc-def procedure identifier arg-list body
thutuc identifier arg-list body
qufunt identifier arg-list body
trong đó thủ tục bắt đầu bằng qufunt sẽ là các thủ tục lƣợng tử, chạy trên bộ mô phỏng lƣợng tử, kết quả trả về là thanh ghi lƣợng tử.
KẾT LUẬN
Luận văn nghiên cứu đạt được một số kết quả sau:
1. Bƣớc đầu tìm hiểu về tính toán lƣợng tử và thuật toán lƣợng tử trong đó chú trọng đi sâu vào ba chuyên đề chính là: Cơ sở tính toán lƣợng tử, Cổng và mạch lƣợng tử, Thuật toán lƣợng tử (bao gồm biến đổi Fourier lƣợng tử và thuật toán Peter Shor). Tác giả cũng bƣớc đầu tìm hiểu về mã hóa lƣợng tử và thám mã lƣợng tử, đại diện là giao thức phân phối khóa lƣợng tử BB84.
2. Nghiên cứu về trình biên dịch, các khái niệm cơ bản của trình biên dịch, ngữ pháp phi ngữ cảnh LALR(1) và cách xây dựng một trình biên dịch. Tác giả cũng đã nghiên cứu cách sử dụng các công cụ xây dựng trình biên dịch nhƣ Lex/Flex và YACC/Bison để sử dụng trong luận văn.
3. Tìm hiểu về mã nguồn mở, các quy định của mã nguồn mở, luật mã nguồn mở GNU version 2.
4. Dựa trên nền tảng mã nguồn mở QCL, ngôn ngữ lập trình lƣợng tử bổ sung các kiểu dữ liệu và các lệnh đặc biệt của tính toán lƣợng tử (nhƣ thanh ghi lƣợng tử, cách đo thanh ghi lƣợng tử), tác giả đề xuất xây dựng một trình biên dịch ngôn ngữ lƣợng tử dựa trên cú pháp của ngôn ngữ lập trình ANSI C hỗ trợ cú pháp câu lệnh theo tiếng Việt (không dấu) để tạo điều kiện dễ dàng hơn cho ngƣời sử dụng.
5. Mô phỏng lại thuật toán Peter Shor dựa trên ngôn ngữ lập trình lƣợng tử vừa xây dựng.
Một số hạn chế và định hướng nghiên cứu tiếp.
Do hạn hẹp về mặt thời gian và khối lƣợng nghiên cứu và lập trình xây dựng bộ mô phỏng là rất lớn. Do đó trong luận văn chƣa nêu đƣợc những thuật toán lƣợng tử khác và làm nổi bật đƣợc những ƣu việt của tính toán lƣợng tử, kết quả mô phỏng cũng chƣa thể hiện đƣợc một cách rõ nét. Tuy nhiên luận văn cũng đã đóng góp đƣợc một số kết quả nhất định cả về mặt phân tích lý luận và khả năng ứng dụng của tính toán lƣợng tử. Vì vậy cần có một vài định hƣớng nghiên cứu tiếp nhƣ sau:
1. Tìm hiểu thêm về tính toán lƣợng tử, xây dựng và thử nghiệm các thuật toán lƣợng tử mới.
2. Hoàn thiện và tối ƣu trình biên dịch ngôn ngữ lập trình lƣợng tử Q, bổ sung hỗ trợ tiếng Việt có dấu đồng thời mở rộng thành ngôn ngữ lập trình lƣợng tử Q++ (có hỗ trợ lập trình hướng đối tượng).
3. Nghiên cứu về mã hóa lƣợng tử, đề xuất xây dựng các mô hình mã hóa lƣợng tử để bảo đảm an toàn dữ liệu khi máy tính lƣợng tử thực sự xuất hiện.
TÀI LIỆU THAM KHẢO
Tài liệu tiếng Việt
1. Kim Cƣơng (1993), Toán học cao cấp, Tập 1, Phần 1: Đại số, Nhà xuất bản Giáo dục, Hà Nội.
2. Dƣơng Minh Đức (2000), Giải tích hàm, Nhà xuất bản Đại học Quốc Gia Thành phố Hồ Chí Minh, Tp Hồ Chí Minh.
3. Vũ Văn Hùng (2004), Cơ học lượng tử, Nhà xuất bản Đại học Sƣ phạm, Hà Nội
4. Học viện Công nghệ Bƣu chính viễn thông (2004), Giáo trình Mật mã học, Nhà xuất bản Bƣu điện, Hà Nội.
5. Phan Trung Huy, Lê Hùng Sơn, Bùi Kiên Cƣờng, Chu Mạnh Dũng, Nguyễn Thanh Hải, Trần Minh Hoàng, Khuất Thành Nam, Vƣơng Mai Phƣơng (2005), "Hệ thống mô phỏng mạch lƣợng tử – Visual Quantum Studio – Công cụ hỗ trợ nghiên cứu và giảng dậy tính toán lƣợng tử", Báo cáo hội thảo khoa học Phát triển công cụ Tin học trợ giúp cho giảng dậy, nghiên cứu và ứng dụng Toán học, Thái Nguyên.
6. Lê Quang Minh (1998), Tenxơ và Toocxơ, Nhà xuất bản Giáo dục, Hà Nội. 7. Bùi Doãn Khanh, Nguyễn Đình Thúc, Hoàng Đức Hải (2004), Giáo trình mã
hoá thông tin, Lý thuyết và ứng dụng, Nhà xuất bản Lao động Xã hội, Hà Nội. 8. Nguyễn Quốc Khánh, Nguyễn Hữu Mạc (2000), Cơ học lượng tử 2, Nhà xuất
bản Đại học Quốc Gia Thành phố Hồ Chí Minh, Tp Hồ Chí Minh.
9. Nguyễn Hoàng Phƣơng (2002), Lý thuyết Nhóm và ứng dụng vào Vật lý học lượng tử, Nhà xuất bản Khoa học và Kỹ thuật, Hà Nội
10. Đặng Huy Ruận, Đại học Quốc Gia Hà Nội (2002), Lý thuyết ngôn ngữ hình thức và otomat, Nhà xuất bản Đại học Quốc Gia Hà Nội.
11. Phạm Quý Tƣ, Đỗ Đình Thanh (2003), Cơ học lượng tử - Tái bản lần thứ nhất, Nhà xuất bản Đại học Quốc Gia Hà Nội, Hà Nội.
12. Nguyễn Thanh Thuỷ, Nguyễn Hữu Đức, Đặng Công Kiên, Doãn Trung Tùng (2003), STL, Lập trình khái lược trong C++, Nhà xuất bản Khoa học và Kỹ thuật, Hà Nội.
13. Trung tâm tƣ vấn xuất bản (1999), Lập trình phần mềm hệ thống, Nhà xuất bản Giao thông Vận tải.
Tài liệu tiếng Anh
14. Andrew Chi–Chih Yao (1993), "Quantum Circuit Complexity", Proc. 34th IEEE Symp. on Foundations of Computer Science.
15. Anthony A. Aaby (July 15, 2004), Theory Introduction to Programming Languages, http://www.cs.wwc.edu/~aabyan/Logic/index.html, DRAFT Version 0.9.
16. Bernhard Ömer (1998), A Procedural Formalism for Quantum Computing, Master thesis technical physics, TU Vienna.
17. Bernhard Ömer (2000), Quantum Programming in QCL, Master thesis computing science, TU Vienna.
18. Bernhard Ömer (2003), Classical Concepts in Quantum Programming, arXiv:quant-ph/0211100 v3
19. Bernhard Ömer (2003), Structured Quantum Programming – PhD thesis, TU Vienna.
20. Benenti G., Casati G., Strini G. (2004), Principles of Quantum Computation and Information Vol. 1 Basic Concepts, ISBN 9812388583.
21. Bennett Ch H, Bessette F, Brassard G, Salvail L and Smolin J (1992),
22. Brett Giles (2003), Compiling a Quantum Programming Language, Slide, University of Calgary.
23. Chen G., Brylinski R.K. (2002), Mathematics of quantum computation, A CRC Press Company.
24. Chris Lomont (2004), A Quantum Fourier Transform Algorithm, arXiv: quant–ph/0404060.
25. Claude E. Shannon (1948), "A Mathematical Theory of Communication",
Reprinted with corrections from The Bell System Technical Journal, Vol. 27, pp. 379–423, 623–656.
26. Claude E. Shannon (1949), "Communication Theory of Secrecy Systems", The Bell System Technical Journal, vol.28-4, page 656-715.
27. Cristopher Moore, Daniel Rockmore (25 May 2006), Generic Quantum Fourier Transforms, arXir: quant–ph/0304064.
28. D Stucki, N Gisin, O Guinnard, G Ribordy, H Zbinden (2002), Quantum key distribution over 67 km with a plug&play system, New Journal of Physics 4. 29. Damian P. Menscher (1997), Modeling the Quantum Computer on the
Classical Computer, Thesis, Brigham Young University.
30. Damien Fitzgerald (May 2004), Quantum Qudit Simulation, Masters Thesis, MSC Software Design and Development, National University of Ireland Galway.
31. Dorit Aharonov (15 December 1998), Quantum Computation, arXiv: quant– ph/9812037.
32. Ekert A., Hayden P., Inamori H. (2000), Basic concepts in quantum computation, arXiv: quant–ph/0011013.
33. Eduard Prugovecki (1971), Quantum Mechanics in Hilbert space, Academic Press Inc.
34. Guihua Zeng (1998), A simple attacks strategy of BB84 protocol, vol 1, arXiv:quant-ph/9812064.
35. Hans De Raedt, Anthony H. Hams, Kristel Michielsen, Koen De Raedt (2000), "Quantum Computer Emulator", Computer Physics Communications 132, pp 1–20.
36. Hans De Raedt and Kristel Michielsen (August 2, 2004), "Computational Methods for Simulating Quantum Computers", Handbook of Theoretical and Computational Nanotechnology, American Scientific Publishers.
37. Hardy, Wright (1975), An Introduction to the theory of Numbers, Fourth Edition, Oxford University Press.
38. Ivan Damgard (2001), QIP Note: On the Quantum Fourier Transform and Applications, www.daimi.au.dk/~ivan/fourier.ps.
39. John Preskill, Quantum Information (Lecture Notes),
http://theory.caltech.edu/~preskill/ph229/.
40. Jennifer Seberry, Chris Charnes, Josef Pieprzyk, Rei Safavi-Naini (1999),
Crypto Topics And Applications II, Algorithms and Theory of Computation Handbook, CRC Press.
41. Julia Wallace (20 Oct 1999), Quantum Computer Simulator - A Review, School of Engineering and Computer Science University of Exeter, Technical Report.
42. Lov K. Grover (1996), "A fast quantum mechanical algorithm for database search", Proc. 28th Ann. ACM Symp. Theory of Computation, ACM Press, New York.
43. Nicolas Gisin, Gregoire Ribordy, Wolfgang Tittel, Hugo Zbinden (January 2002), "Quantum cryptography", Reviews Of Modern Physics, Volume 74. 44. Nikolaos P. Papadakos (2001), Quantum Information Theory and Application
45. Peter W. Shor (1998), "Quantum Computing", Documenta Mathematica - Extra Volume ICM.
46. Peter W. Shor (6 Jul 2001), Introduction To Quantum Algorithms, arXir: quant–ph/0005003 v2.
47. Peter W. Shor (25 Jan 1996), Polynomial–Time Algorithm for Prime Factorization and Discrete Logarithm on Quantum Computer, arXiv: quant– ph/9508027 v2.
48. Peter W. Shor (1994), Algorithm for Quantum Computation: Discrete Log and Factoring, Extended Abstract.
49. Paolo Zuliani (2001), Quantum Programming, Doctor of Philosophy, University of Oxford.
50. Quantum Fourier Transform, http://beige.ucs.indiana.edu/B679/node103.html 51. R.L. Rivest, A. Shamir, L. Adleman (1978), "A Method for Obtaining Digital
Signatures and Public-Key Cryptosystems", Communications of the ACM, Vol.21, Nr.2.
52. Robert R. Tucci (May 23, 2006), A Rudimentary Quantum Compiler (2cnd Ed.), arXiv:quant-ph/9902062 v1
53. S. Bettelli (2002), Toward an architecture for quantum programming, Thesis, Università degli Studi di Trento.
54. S. Bettelli, L. Serafini, T. Calarco (2003), Toward an architecture for quantum programming, arXiv:cs.PL/0103009 v3.
55. Samuel J. Lomonaco (8 November 1998), A quick glance at Quantum Cryptography.
56. SENKO Corporation (1999), Quantum Computer Simulator For Windows/Macintosh, User Guide, Published By SENKO Corporation.
57. Thorsten Altenkirch (2001), Designing a Quantum Programming Language, University of Nottingham
58. Townsend P.D (12 May 1994), Secure key distribution system based on quantum cryptography, Electronics Letters, Volume 30, Issue 10, http://scitation.aip.org/getabs/servlet/GetabsServlet?prog=normal&id=ELLEA K000030000010000809000001&idtype=cvips&gifs=yes
59. Vlatko Vedral, Martin B. Plenio (25 Feb 1998), Basics of quantum computation, arXiv: quant–ph/9802065.
60. Whitfield Diffie, Martin E. Hellman (Nov. 1976), "New Directions in Cryptography", IEEE Trans. Inform. Theory, IT-22:644—654.
61. Yan Prizker, Simulation of Quantum Computation on Intel-Based Architectures, http://www.openqubit.org/
62. Zdzislaw Meglicki (5 April 2005), Introduction to Quantum Computing (M743), www.tqc.iu.edu/M743/m743.pdf.
PHỤ LỤC A. File Lex/Flex và YACC/Bison của ngôn ngữ Q
A1. File q.lex (File định nghĩa phân tích từ vựng)
%{ #include "types.h" #include "syntax.h" #include "parse.h" #include "y.tab.h" YY_BUFFER_STATE include_stack[YYMAXINCLUDE]; YY_BUFFER_STATE string_buffer; FILE* toplevel_file; double cnum_real,cnum_imag; %} %option noyywrap %option yylineno %x STR %x REM %x COM %x INC %x SET %x SCINC ALPHA [a-zA-Z] DIGIT [0-9] ALPHANUM {ALPHA}|{DIGIT} SPECIAL [^a-zA-Z0-9] UNSIGNED {DIGIT}+ REAL {DIGIT}+"."{DIGIT}* CNUM [ \t]*[+\-]?{DIGIT}+("."{DIGIT}*)?[ \t]* COMPLEX "("{CNUM}","{CNUM}")" ID {ALPHA}{ALPHANUM}* %%
"const" yylval.OBJ=0; return tokCONST;
"cond" yylval.OBJ=0; return tokCOND;
"extern" yylval.OBJ=0; return tokEXTERN;
"operator" yylval.OBJ=0; return tokOP; "procedure" yylval.OBJ=0; return tokPROC;
"qufunct" yylval.OBJ=0; return tokQUFUN;
"for" yylval.OBJ=0; return tokFOR;
"to" yylval.OBJ=0; return tokTO;
"while" yylval.OBJ=0; return tokWHILE;
"until" yylval.OBJ=0; return tokUNTIL;
"break" yylval.OBJ=0; return tokBREAK;
"return" yylval.OBJ=0; return tokRETURN;
"if" yylval.OBJ=0; return tokIF;
"else" yylval.OBJ=0; return tokELSE;
"and" yylval.OBJ=0; return tokAND;
"or" yylval.OBJ=0; return tokOR;
"xor" yylval.OBJ=0; return tokXOR;
"not" yylval.OBJ=0; return tokNOT;
"mod" yylval.OBJ=0; return tokMOD;
"step" yylval.OBJ=0; return tokSTEP;
"input" yylval.OBJ=0; return tokINPUT;
"print" yylval.OBJ=0; return tokPRINT;
"exit" yylval.OBJ=0; return tokEXIT;
"measure" yylval.OBJ=0; return tokMEASURE;
"reset" yylval.OBJ=0; return tokRESET;
"dump" yylval.OBJ=0; return tokDUMP;
"plot" yylval.OBJ=0; return tokPLOT;
"list" yylval.OBJ=0; return tokINSPECT;
"load" yylval.OBJ=0; return tokLOAD;
"save" yylval.OBJ=0; return tokSAVE;
"shell" yylval.OBJ=0; return tokSHELL;
"hangso" yylval.OBJ=0; return tokCONST;
"hang so" yylval.OBJ=0; return tokCONST;
"benngoai" yylval.OBJ=0; return tokEXTERN; "ben ngoai" yylval.OBJ=0; return tokEXTERN;
"toantu" yylval.OBJ=0; return tokOP;
"toan tu" yylval.OBJ=0; return tokOP;
"thutuc" yylval.OBJ=0; return tokPROC;
"thu tuc" yylval.OBJ=0; return tokPROC;
"qufunct" yylval.OBJ=0; return tokQUFUN;
"lap" yylval.OBJ=0; return tokFOR;
"toi" yylval.OBJ=0; return tokTO;
"trongkhi" yylval.OBJ=0; return tokWHILE;
"trong khi" yylval.OBJ=0; return tokWHILE;
"batdaulap" yylval.OBJ=0; return tokBATDAULAP;
"bat dau lap" yylval.OBJ=0; return tokBATDAULAP;
"chodenkhi" yylval.OBJ=0; return tokCHODENKHI;
"cho den khi" yylval.OBJ=0; return tokCHODENKHI;
"thoatvonglap" yylval.OBJ=0; return tokBREAK;
"thoat vong lap" yylval.OBJ=0; return tokBREAK;
"thi" yylval.OBJ=0; return tokTHI; "nguoclai" yylval.OBJ=0; return tokNGUOCLAI; "nguoc lai" yylval.OBJ=0; return tokNGUOCLAI;
"va" yylval.OBJ=0; return tokAND;
"hoac" yylval.OBJ=0; return tokOR;
"xor" yylval.OBJ=0; return tokXOR;
"khong" yylval.OBJ=0; return tokNOT;
"phandu" yylval.OBJ=0; return tokMOD;
"buocnhay" yylval.OBJ=0; return tokSTEP;
"buoc nhay" yylval.OBJ=0; return tokSTEP;
"nhapvao" yylval.OBJ=0; return tokINPUT;
"nhap vao" yylval.OBJ=0; return tokINPUT;
"hienthi" yylval.OBJ=0; return tokPRINT;
"hien thi" yylval.OBJ=0; return tokPRINT;
"thoat" yylval.OBJ=0; return tokEXIT;
"dothanhghi" yylval.OBJ=0; return tokMEASURE;
"do thanh ghi" yylval.OBJ=0; return tokMEASURE;
"lamsach" yylval.OBJ=0; return tokRESET;
"lam sach" yylval.OBJ=0; return tokRESET;
"vedothi" yylval.OBJ=0; return tokPLOT;
"hienthidanhsach" yylval.OBJ=0; return tokINSPECT;
"napfile" yylval.OBJ=0; return tokLOAD;
"nap file" yylval.OBJ=0; return tokLOAD;
"ghifile" yylval.OBJ=0; return tokSAVE;
"ghi file" yylval.OBJ=0; return tokSAVE;
"<->" yylval.OBJ=0; return tokSWAP;
"->" yylval.OBJ=0; return tokTRANS;
"<-" yylval.OBJ=0; return tokINVTRANS;
"==" yylval.OBJ=0; return tokEQ;
"<=" yylval.OBJ=0; return tokLEEQ;
">=" yylval.OBJ=0; return tokGREQ;
"!=" yylval.OBJ=0; return tokNOTEQ;
"\\" yylval.OBJ=0; return tokRANGE_LENGTH;
"::" yylval.OBJ=0; return tokRANGE_LENGTH;
":" yylval.OBJ=0; return tokRANGE_END;
".." yylval.OBJ=0; return tokRANGE_END;
"("|")"|"["|"]" yylval.OBJ=0; return *yytext;
"+"|"-"|"*"|"/"|"^" yylval.OBJ=0; return *yytext; "<"|">"|"="|"#" yylval.OBJ=0; return *yytext; "!"|"&"|"," yylval.OBJ=0; return *yytext;
"{"[ \t\n\r;]* yylval.OBJ=0; return '{';
"}"[ \t\n\r;]* yylval.OBJ=0; return '}';
"boolean" yylval.TYPE=tBOOLEAN; return tokTYPE;
"int" yylval.TYPE=tINTEGER; return tokTYPE;
"real" yylval.TYPE=tREAL; return tokTYPE;
"complex" yylval.TYPE=tCOMPLEX; return tokTYPE;
"string" yylval.TYPE=tSTRING; return tokTYPE;
"qureg" yylval.TYPE=tQUREG; return tokTYPE;
"quconst" yylval.TYPE=tQUCONST; return tokTYPE;
"quvoid" yylval.TYPE=tQUVOID; return tokTYPE;
"quscratch" yylval.TYPE=tQUSCR; return tokTYPE;
"qucond" yylval.TYPE=tQUCOND; return tokTYPE;
"songuyen" yylval.TYPE=tINTEGER; return tokTYPE;
"so nguyen" yylval.TYPE=tINTEGER; return tokTYPE;
"sothuc" yylval.TYPE=tREAL; return tokTYPE;