📄 antlrhelloworld.mht
字号:
</table>
<![endif]></v:textbox>
</v:shape><v:shape id=3D"_x0000_s1210" type=3D"#_x0000_t202" style=3D'pos=
ition:absolute;
left:7407;top:9396;width:780;height:468'>
<v:textbox>
<![if !mso]>
<table cellpadding=3D0 cellspacing=3D0 width=3D"100%">
<tr>
<td><![endif]>
<div>
<p class=3DMsoNormal><span lang=3DEN-US>C++</span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
</v:shape><v:line id=3D"_x0000_s1211" style=3D'position:absolute' from=3D=
"6941,9084"
to=3D"6942,9396">
<v:stroke endarrow=3D"block"/>
</v:line><v:line id=3D"_x0000_s1212" style=3D'position:absolute' from=3D"=
7767,9084"
to=3D"7768,9396">
<v:stroke endarrow=3D"block"/>
</v:line><v:shape id=3D"_x0000_s1213" type=3D"#_x0000_t202" style=3D'posi=
tion:absolute;
left:8352;top:9396;width:1005;height:468'>
<v:textbox>
<![if !mso]>
<table cellpadding=3D0 cellspacing=3D0 width=3D"100%">
<tr>
<td><![endif]>
<div>
<p class=3DMsoNormal><span lang=3DEN-US style=3D'mso-bidi-font-size:1=
0.5pt'>Python</span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
</v:shape><v:line id=3D"_x0000_s1214" style=3D'position:absolute' from=3D=
"8711,9084"
to=3D"8712,9396">
<v:stroke endarrow=3D"block"/>
</v:line><v:shape id=3D"_x0000_s1215" type=3D"#_x0000_t202" style=3D'posi=
tion:absolute;
left:7917;top:10332;width:1620;height:780' stroked=3D"f">
<v:fill opacity=3D"0"/>
<v:textbox>
<![if !mso]>
<table cellpadding=3D0 cellspacing=3D0 width=3D"100%">
<tr>
<td><![endif]>
<div>
<p class=3DMsoNormal><b style=3D'mso-bidi-font-weight:normal'><span
lang=3DEN-US style=3D'font-size:12.0pt'>… …<o:p></o:p></s=
pan></b></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
</v:shape><v:shapetype id=3D"_x0000_t63" coordsize=3D"21600,21600" o:spt=
=3D"63"
adj=3D"1350,25920" path=3D"wr,,21600,21600@15@16@17@18l@21@22xe">
<v:stroke joinstyle=3D"miter"/>
<v:formulas>
<v:f eqn=3D"val #0"/>
<v:f eqn=3D"val #1"/>
<v:f eqn=3D"sum 10800 0 #0"/>
<v:f eqn=3D"sum 10800 0 #1"/>
<v:f eqn=3D"atan2 @2 @3"/>
<v:f eqn=3D"sumangle @4 11 0"/>
<v:f eqn=3D"sumangle @4 0 11"/>
<v:f eqn=3D"cos 10800 @4"/>
<v:f eqn=3D"sin 10800 @4"/>
<v:f eqn=3D"cos 10800 @5"/>
<v:f eqn=3D"sin 10800 @5"/>
<v:f eqn=3D"cos 10800 @6"/>
<v:f eqn=3D"sin 10800 @6"/>
<v:f eqn=3D"sum 10800 0 @7"/>
<v:f eqn=3D"sum 10800 0 @8"/>
<v:f eqn=3D"sum 10800 0 @9"/>
<v:f eqn=3D"sum 10800 0 @10"/>
<v:f eqn=3D"sum 10800 0 @11"/>
<v:f eqn=3D"sum 10800 0 @12"/>
<v:f eqn=3D"mod @2 @3 0"/>
<v:f eqn=3D"sum @19 0 10800"/>
<v:f eqn=3D"if @20 #0 @13"/>
<v:f eqn=3D"if @20 #1 @14"/>
</v:formulas>
<v:path o:connecttype=3D"custom" o:connectlocs=3D"10800,0;3163,3163;0,10=
800;3163,18437;10800,21600;18437,18437;21600,10800;18437,3163;@21,@22"
textboxrect=3D"3163,3163,18437,18437"/>
<v:handles>
<v:h position=3D"#0,#1"/>
</v:handles>
</v:shapetype><v:shape id=3D"_x0000_s1219" type=3D"#_x0000_t63" style=3D'=
position:absolute;
left:7380;top:7680;width:2520;height:1092' adj=3D"-3146,7358">
<v:textbox>
<![if !mso]>
<table cellpadding=3D0 cellspacing=3D0 width=3D"100%">
<tr>
<td><![endif]>
<div>
<p class=3DMsoNormal><span style=3D'font-family:SimSun;mso-ascii-font=
-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>嵌&#=
20837;</span><span
lang=3DEN-US>C#</span><span style=3D'font-family:SimSun;mso-ascii-fon=
t-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>,</=
span><span
lang=3DEN-US>java…</span><span style=3D'font-family:SimSun;mso-=
ascii-font-family:
"Times New Roman";mso-hansi-font-family:"Times New Roman"'>代&#=
30721;片段</span></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
</v:shape><w:wrap type=3D"topAndBottom"/>
</v:group><![endif]--><![if !vml]><span style=3D'mso-ignore:vglayout'>
<table cellpadding=3D0 cellspacing=3D0>
<tr>
<td width=3D24 height=3D0></td>
</tr>
<tr>
<td></td>
<td><img width=3D552 height=3D291 src=3D"Chapter1.files/image001.gif" v:=
shapes=3D"_x0000_s1185 _x0000_s1184 _x0000_s1206 _x0000_s1203 _x0000_s1187 =
_x0000_s1188 _x0000_s1189 _x0000_s1190 _x0000_s1191 _x0000_s1192 _x0000_s11=
93 _x0000_s1194 _x0000_s1195 _x0000_s1196 _x0000_s1197 _x0000_s1198 _x0000_=
s1199 _x0000_s1200 _x0000_s1201 _x0000_s1202 _x0000_s1204 _x0000_s1205 _x00=
00_s1207 _x0000_s1208 _x0000_s1209 _x0000_s1210 _x0000_s1211 _x0000_s1212 _=
x0000_s1213 _x0000_s1214 _x0000_s1215 _x0000_s1219"></td>
</tr>
</table>
</span><![endif]><!--[if gte vml 1]></o:wrapblock><![endif]--><br
style=3D'mso-ignore:vglayout' clear=3DALL>
<span lang=3DEN-US style=3D'mso-bidi-font-size:10.5pt;font-family:NSimSun'>=
ANTLR</span><span
style=3D'mso-bidi-font-size:10.5pt;font-family:NSimSun'>是<span lang=
=3DEN-US>ANother
Tool for Language Recognition</span>的缩写<span lang=3DEN=
-US>“</span>又一个语言识别&=
#24037;具<span
lang=3DEN-US>”</span>,读</span><span class=3Dpronounce1>=
<span
lang=3DEN-US style=3D'mso-ansi-font-size:10.5pt;mso-bidi-font-size:10.5pt;
color:windowtext'>[ 'æntlə ]</span></span><span class=3Dpronounc=
e1><span
style=3D'mso-ansi-font-size:10.5pt;mso-bidi-font-size:10.5pt;font-family:Si=
mSun;
mso-ascii-font-family:"Lucida Sans Unicode";mso-hansi-font-family:"Lucida S=
ans Unicode";
color:windowtext'>。</span></span><span style=3D'mso-bidi-font-size:1=
0.5pt;
font-family:NSimSun'>从名字上可以௧=
5;出在<span
lang=3DEN-US>ANTLR</span>出现之前已经&#=
23384;在其它语言识别工Ð=
55;了(如<span
lang=3DEN-US>LEX<a style=3D'mso-footnote-id:ftn1' href=3D"#_ftn1" name=3D"_=
ftnref1"
title=3D""><span class=3DMsoFootnoteReference><span style=3D'mso-special-ch=
aracter:
footnote'><![if !supportFootnotes]><span class=3DMsoFootnoteReference><span
lang=3DEN-US style=3D'font-size:10.5pt;font-family:NSimSun;mso-bidi-font-fa=
mily:
"Times New Roman";mso-font-kerning:1.0pt;mso-ansi-language:EN-US;mso-fareas=
t-language:
ZH-CN;mso-bidi-language:AR-SA'>[1]</span></span><![endif]></span></span></a=
></span>,<span
lang=3DEN-US>YACC<a style=3D'mso-footnote-id:ftn2' href=3D"#_ftn2" name=3D"=
_ftnref2"
title=3D""><span class=3DMsoFootnoteReference><span style=3D'mso-special-ch=
aracter:
footnote'><![if !supportFootnotes]><span class=3DMsoFootnoteReference><span
lang=3DEN-US style=3D'font-size:10.5pt;font-family:NSimSun;mso-bidi-font-fa=
mily:
"Times New Roman";mso-font-kerning:1.0pt;mso-ansi-language:EN-US;mso-fareas=
t-language:
ZH-CN;mso-bidi-language:AR-SA'>[2]</span></span><![endif]></span></span></a=
></span>)。<span
lang=3DEN-US>ANTLR</span>的官方定义为&#=
65306;根据一种可以嵌入å=
14;<span
lang=3DEN-US>Java, C++</span>或<span lang=3DEN-US>C#</span>等&#=
36741;助代码段的文法,Ĉ=
69;构筑出相对该文法的=
识别器,编译器或翻=
5793;器的一种语言工具੭=
4;架。这个定义说明了<=
span
lang=3DEN-US>ANTLR</span>的功能是根据&#=
32473;定文法自动生成编ť=
93;器,其过程为先编写=
相应语言的文法然后=
9983;成相应语言编译器Ӎ=
0;定义提到的语言识别&=
#22120;,编译器和翻译器=
105;们以后统称为语法分=
;析器。事实上<span
lang=3DEN-US>ANTLR</span>是生成相应语&#=
35328;编译器的源代码,û=
05;们还需要编译它。那=
么<span
lang=3DEN-US>ANTLR</span>可以生成哪些&#=
26041;语言的语法分析器ě=
04;代码语言的代码呢?=
这是程序员很关心的=
8382;题。幸运的是<span
lang=3DEN-US>ANTLR</span>现在已经支持&#=
20102;多种当前流行的开Ö=
57;语言,包括<span
lang=3DEN-US>Java</span>、<span lang=3DEN-US>C#</span>、<span
lang=3DEN-US>C</span>、<span lang=3DEN-US>C++</span>、<span lan=
g=3DEN-US>Objective-C</span>、<span
lang=3DEN-US>Python</span>和<span lang=3DEN-US> Ruby.1</span>等=
。你可以根据需要生=
5104;其中任何一种语言௚=
0;语法分析器。本书主&=
#35201;介绍<span
lang=3DEN-US>java</span>,<span lang=3DEN-US>C#</span>两种=
;语言,有详细的操作&#=
27493;骤包括如何编译、û=
91;行和如何使用<span
lang=3DEN-US style=3D'mso-bidi-font-weight:bold'>ANTLRWorks</span>开&=
#21457;环境编写文法等。#=
835;者可以顺利上手,避=
;免实际操作的障碍。&#=
21518;面章节还会指出在<span
lang=3DEN-US>Java</span>和<span lang=3DEN-US>C#</span>开发=
;中应注意的细微差别&#=
65292;确保程序的顺利运Ŝ=
92;。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p class=3DMsoNormal style=3D'margin-bottom:6.0pt;line-height:20.0pt;mso-li=
ne-height-rule:
exactly'><span lang=3DEN-US style=3D'mso-bidi-font-size:10.5pt;font-family:=
NSimSun'><o:p> </o:p></span></p>
<p class=3DMsoNormal style=3D'margin-top:14.0pt;margin-right:0cm;margin-bot=
tom:
10.0pt;margin-left:0cm;line-height:20.0pt;mso-line-height-rule:exactly'><b
style=3D'mso-bidi-font-weight:normal'><span lang=3DEN-US style=3D'font-size=
:15.0pt;
font-family:NSimSun'>1.1</span></b><b style=3D'mso-bidi-font-weight:normal'=
><span
style=3D'font-size:15.0pt;font-family:NSimSun'>开发<span lang=
=3DEN-US>Hello
World</span>示例<span lang=3DEN-US><o:p></o:p></span></span></b=
></p>
<p class=3DMsoNormal style=3D'margin-bottom:6.0pt;text-indent:21.0pt;mso-ch=
ar-indent-count:
2.0;line-height:20.0pt;mso-line-height-rule:exactly'><span style=3D'mso-bid=
i-font-size:
10.5pt;font-family:NSimSun'>本章将开发一=
;个简单示例让读者对<s=
pan
lang=3DEN-US>ANTLR</span>有一个初步的&#=
35748;识,并搭建开发环â=
59;以便后续的学习。读=
者在示例中遇到不懂=
0340;地方也不必担心,ৎ=
5;们的目的是搭建开发&=
#29615;境学会编译运行语=
861;分析器。用<span
lang=3DEN-US>ANTLR</span>开发一个语法&#=
20998;析器大致分三步,Ļ=
32;一步:写出要分析内=
容的文法。第二步:=
9992;<span
lang=3DEN-US>ANTLR</span>生成相对该文&#=
27861;的语法分析器的代ij=
21;。第三步:编译运行=
语法分析器。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p class=3DMsoNormal style=3D'margin-bottom:6.0pt;text-indent:21.0pt;mso-ch=
ar-indent-count:
2.0;line-height:20.0pt;mso-line-height-rule:exactly'><span style=3D'mso-bid=
i-font-size:
10.5pt;font-family:NSimSun'>和多数编译书=
;籍一样,本章也用解&#=
26512;简单的表达式作为Ķ=
34;例。要解析的表达式=
中有二种数据类型:=
5972;数
如<span lang=3DEN-US>“23”, “5” </span>和=
;字符串
如<span lang=3DEN-US>“Hello World”</span>。表=
达式中以算术表达式=
0026;主也包括赋值表达ঁ=
5;。我们列举两个表达&=
#24335;语句:<span
lang=3DEN-US><o:p></o:p></span></span></p>
<p class=3DMsoNormal style=3D'margin-bottom:6.0pt;text-indent:21.0pt;mso-ch=
ar-indent-count:
2.0;line-height:20.0pt;mso-line-height-rule:exactly'><span lang=3DEN-US
style=3D'mso-bidi-font-size:10.5pt;font-family:NSimSun'>23+4*(5+1);<span
style=3D'mso-spacerun:yes'> =
</span>str=3D“Hello World”;<o:p></o:p></span></p>
<p class=3DMsoNormal style=3D'margin-bottom:6.0pt;line-height:20.0pt;mso-li=
ne-height-rule:
exactly'><span style=3D'mso-bidi-font-size:10.5pt;font-family:NSimSun'>=
532;一条语句是一个算术=
;表达式,括号改变了&#=
36816;算顺序,计算结果Ç=
81;赋给任何变量。第二=
条是一个赋值表达式=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -