<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-ngaut-随笔分类-Compilers:Principles,Techniques,and Tools </title><link>http://www.cppblog.com/ngaut/category/1618.html</link><description>asm/c/c++/......</description><language>zh-cn</language><lastBuildDate>Mon, 11 Aug 2008 03:05:07 GMT</lastBuildDate><pubDate>Mon, 11 Aug 2008 03:05:07 GMT</pubDate><ttl>60</ttl><item><title>我也发一个超级简单的玩具级编译器，仅此说明一下编译的几个过程【开源】</title><link>http://www.cppblog.com/ngaut/archive/2008/08/10/58451.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 10 Aug 2008 08:56:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/08/10/58451.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/58451.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/08/10/58451.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/58451.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/58451.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/ngaut/archive/2008/08/10/58451.html'>阅读全文</a><img src ="http://www.cppblog.com/ngaut/aggbug/58451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-08-10 16:56 <a href="http://www.cppblog.com/ngaut/archive/2008/08/10/58451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>介绍一款国产开源C编译器</title><link>http://www.cppblog.com/ngaut/archive/2008/08/08/58346.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 08 Aug 2008 09:23:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/08/08/58346.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/58346.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/08/08/58346.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/58346.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/58346.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/ngaut/archive/2008/08/08/58346.html'>阅读全文</a><img src ="http://www.cppblog.com/ngaut/aggbug/58346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-08-08 17:23 <a href="http://www.cppblog.com/ngaut/archive/2008/08/08/58346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近写了个小工具，自动往代码里面加入垃圾代码</title><link>http://www.cppblog.com/ngaut/archive/2008/07/29/57385.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Mon, 28 Jul 2008 17:32:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/07/29/57385.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/57385.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/07/29/57385.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/57385.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/57385.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/ngaut/archive/2008/07/29/57385.html'>阅读全文</a><img src ="http://www.cppblog.com/ngaut/aggbug/57385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-07-29 01:32 <a href="http://www.cppblog.com/ngaut/archive/2008/07/29/57385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>antlr笔记</title><link>http://www.cppblog.com/ngaut/archive/2008/06/15/53341.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 15 Jun 2008 07:32:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/06/15/53341.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/53341.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/06/15/53341.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/53341.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/53341.html</trackback:ping><description><![CDATA[请勿将任何相关的文件放在中文目录下，如语法文件 *.g<br> <img src ="http://www.cppblog.com/ngaut/aggbug/53341.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-06-15 15:32 <a href="http://www.cppblog.com/ngaut/archive/2008/06/15/53341.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>antlr资料</title><link>http://www.cppblog.com/ngaut/archive/2008/05/30/51619.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 30 May 2008 10:28:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/05/30/51619.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/51619.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/05/30/51619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/51619.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/51619.html</trackback:ping><description><![CDATA[
<a href="http://www.antlr.org/wiki/display/ANTLR3/Interfacing+AST+with+Java">http://www.antlr.org/wiki/display/ANTLR3/Interfacing+AST+with+Java</a><br><a href="http://www.cnblogs.com/RicCC/archive/2008/03/17/antlr-notepad.html">http://www.cnblogs.com/RicCC/archive/2008/03/17/antlr-notepad.html</a> <br><a href="http://llf.javaeye.com/blog/157507">http://llf.javaeye.com/blog/157507</a> <br><a href="http://llf.javaeye.com/blog/156170">http://llf.javaeye.com/blog/156170</a><div><span  style="font-family: 'Lucida Grande'; font-size: 12px; white-space: pre; ">http://www.bearcave.com/software/antlr/antlr_examples.html</span><br></div><img src ="http://www.cppblog.com/ngaut/aggbug/51619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-05-30 18:28 <a href="http://www.cppblog.com/ngaut/archive/2008/05/30/51619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EBNF Grammar for Mini-Java</title><link>http://www.cppblog.com/ngaut/archive/2008/04/28/48376.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Mon, 28 Apr 2008 12:25:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/04/28/48376.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/48376.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/04/28/48376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/48376.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/48376.html</trackback:ping><description><![CDATA[<h1>EBNF Grammar for Mini-Java</h1>
<p><!-- width = 117 15 6??  -->
<table>
    <!-- Goal -->
    <tbody>
        <tr>
            <td vAlign=baseline align=right><a name=prod1>Goal</a></td>
            <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>=</font></em></span></td>
            <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#MainClass"><font color=#000000>MainClass</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=meta><em><font color=#ff0000 size=4>{</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#prod3"><font color=#000000>ClassDeclaration</font></a> <span class=meta><em><font color=#ff0000 size=4>},</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#EOF"><font color=#000000>EOF</font></a><span class=meta><em><font color=#ff0000 size=4>;</font></em></span> </td>
        </tr>
        <tr style="HEIGHT: 15px">
            <td></td>
        </tr>
        <!-- for inter-row spacing -->
    </tbody>
    <!-- MainClass -->
    <tbody>
        <tr>
            <td vAlign=baseline align=right><a name=MainClass>MainClass</a></td>
            <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>=</font></em></span></td>
            <!-- class Identifier { public static void main ( String [ ] Identifier ) { Statement } } -->
            <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"class"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"{"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"public"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"static"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"void"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"main"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"("</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"String"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"["</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"]"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">")"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"{"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Statement"><font color=#000000>Statement</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"}"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"}"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>;</font></em></span> </td>
        </tr>
        <tr style="HEIGHT: 15px">
            <td></td>
        </tr>
        <!-- for inter-row spacing -->
    </tbody>
    <!-- ClassDeclaration -->
    <tbody>
        <tr>
            <td vAlign=baseline align=right><a name=ClassDeclaration>ClassDeclaration</a></td>
            <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>=</font></em></span></td>
            <!-- class Identifier (/ extends Identifer /) { (: VarDeclaration :) (: MethodDeclaration :) }  -->
            <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"class"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=meta><em><font color=#ff0000 size=4>[</font></em></span> <span class=key><strong><font face="Courier New">"extends"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a> <em><font size=4><font color=#ff0000><span class=meta>]</span><span class=meta>,</span></font></font></em> <span class=key><strong><font face="Courier New">"{"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=meta><em><font color=#ff0000 size=4>{</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#VarDeclaration"><font color=#000000>VarDeclaration</font></a> <em><font size=4><font color=#ff0000><span class=meta>}</span><span class=meta>,</span></font></font></em> <span class=meta><em><font color=#ff0000 size=4>{</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#MethodDeclartion"><font color=#000000>MethodDeclaration</font></a> <span class=meta><em><font color=#ff0000 size=4>}</font></em></span> <span class=key><strong><font face="Courier New">"}"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>;</font></em></span> </td>
        </tr>
        <tr style="HEIGHT: 15px">
            <td></td>
        </tr>
        <!-- for inter-row spacing -->
    </tbody>
    <!-- VarDeclaration -->
    <tbody>
        <tr>
            <td vAlign=baseline align=right><a name=VarDeclaration>VarDeclaration</a></td>
            <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>=</font></em></span></td>
            <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Type"><font color=#000000>Type</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">";"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>;</font></em></span> </td>
            <tr style="HEIGHT: 15px">
                <td></td>
            </tr>
            <!-- inter-row spacing -->
        </tbody>
        <!-- MethodDeclaration -->
        <tbody>
            <tr>
                <td vAlign=baseline align=right><a name=MethodDeclaration>MethodDeclaration</a></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>=</font></em></span></td>
                <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"public"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Type"><font color=#000000>Type</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"("</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=meta><em><font color=#ff0000 size=4>[</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Type"><font color=#000000>Type</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=meta><em><font color=#ff0000 size=4>{</font></em></span> <span class=key><strong><font face="Courier New">","</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Type"><font color=#000000>Type</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a> <span class=meta><em><font color=#ff0000 size=4>},</font></em></span> <em><font size=4><font color=#ff0000><span class=meta>]</span><span class=meta>,</span></font></font></em> <span class=key><strong><font face="Courier New">")"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"{"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=meta><em><font color=#ff0000 size=4>{</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#VarDeclaration"><font color=#000000>VarDeclaration</font></a> <em><font size=4><font color=#ff0000><span class=meta>}</span><span class=meta>,</span></font></font></em> <span class=meta><em><font color=#ff0000 size=4>{</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Statement"><font color=#000000>Statement</font></a> <em><font size=4><font color=#ff0000><span class=meta>}</span><span class=meta>,</span></font></font></em> <span class=key><strong><font face="Courier New">"return"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">";"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"}"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>;</font></em></span> </td>
            </tr>
            <tr style="HEIGHT: 15px">
                <td></td>
            </tr>
            <!-- inter-row spacing -->
        </tbody>
        <!-- Type -->
        <tbody>
            <tr>
                <td vAlign=baseline align=right><a name=Type>Type</a></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>=</font></em></span></td>
                <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"int"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"["</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"]"</font></strong></span> </td>
            </tr>
            <tr>
                <td vAlign=baseline align=right></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"boolean"</font></strong></span></td>
            </tr>
            <tr>
                <td vAlign=baseline align=right><strong><font face="Courier New"></font></strong></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"int"</font></strong></span></td>
            </tr>
            <tr>
                <td vAlign=baseline align=right><strong><font face="Courier New"></font></strong></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a></td>
            </tr>
            <tr>
                <td vAlign=baseline align=right></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>;</font></em></span></td>
                <td vAlign=baseline align=left><em><font color=#ff0000 size=4></font></em></td>
            </tr>
            <tr style="HEIGHT: 15px">
                <td><em><font color=#ff0000 size=4></font></em></td>
            </tr>
            <!-- inter-row spacing -->
        </tbody>
        <!-- Statement -->
        <tbody>
            <tr>
                <td vAlign=baseline align=right><a name=Statement>Statement</a></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>=</font></em></span></td>
                <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"{"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=meta><em><font color=#ff0000 size=4>{</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Statement"><font color=#000000>Statement</font></a> <em><font size=4><font color=#ff0000><span class=meta>}</span><span class=meta>,</span></font></font></em> <span class=key><strong><font face="Courier New">"}" </font></strong></span></td>
            </tr>
            <tr>
                <td vAlign=baseline align=right><strong><font face="Courier New"></font></strong></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"if"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"("</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">")"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Statement"><font color=#000000>Statement</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"else"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Statement"><font color=#000000>Statement</font></a> </td>
            </tr>
            <tr>
                <td vAlign=baseline align=right></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"while"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"("</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">")"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Statement"><font color=#000000>Statement</font></a> </td>
            </tr>
            <tr>
                <td vAlign=baseline align=right></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"System.out.println"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"("</font></strong></span> <span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">")"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">";"</font></strong></span> </td>
            </tr>
            <tr>
                <td vAlign=baseline align=right></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"="</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">";"</font></strong></span> </td>
            </tr>
            <tr>
                <td vAlign=baseline align=right></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"["</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"]"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"="</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">";"</font></strong></span> </td>
            </tr>
            <tr>
                <td vAlign=baseline align=right></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>;</font></em></span></td>
                <td vAlign=baseline align=left><em><font color=#ff0000 size=4></font></em></td>
            </tr>
            <tr style="HEIGHT: 15px">
                <td><em><font color=#ff0000 size=4></font></em></td>
            </tr>
            <!-- inter-row spacing -->
        </tbody>
        <!-- Expression -->
        <tbody>
            <!-- Expression ::= Expression ( "&&" | "<" | "+" | "-" | "*" ) Expression -->
            <tr>
                <td vAlign=baseline align=right><a name=Expression>Expression</a></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>=</font></em></span></td>
                <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a> <span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=meta><em><font color=#ff0000 size=4>(</font></em></span> "&amp;&amp;" | "&lt;" | "+" | "-" | "*" <span class=meta><em><font color=#ff0000 size=4>)</font></em></span> <span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a> </td>
            </tr>
            <!-- Expression ::= Expression  "[" Expression "]" -->
            <tr>
                <td vAlign=baseline align=right></td>
                <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"["</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"]"</font></strong></span> </td>
                <!-- Expression ::= Expression "." "length" -->
                <tr>
                    <td vAlign=baseline align=right></td>
                    <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                    <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"."</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"length"</font></strong></span> </td>
                    <tr>
                        <td vAlign=baseline align=right></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                        <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"."</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"("</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=meta><em><font color=#ff0000 size=4>[</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a> <span class=meta><em><font color=#ff0000 size=4>{</font></em></span> <span class=key><strong><font face="Courier New">","</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a> <span class=meta><em><font color=#ff0000 size=4>}</font></em></span> <em><font size=4><font color=#ff0000><span class=meta>]</span><span class=meta>,</span></font></font></em> <span class=key><strong><font face="Courier New">")"</font></strong></span> </td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                        <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#IntegerLiteral"><font color=#000000>IntegerLiteral</font></a> </td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span> </td>
                        <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"true"</font></strong></span></td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right><strong><font face="Courier New"></font></strong></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span> </td>
                        <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"false"</font></strong></span></td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right><strong><font face="Courier New"></font></strong></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                        <td vAlign=baseline align=left><a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a></td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                        <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"this"</font></strong></span></td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right><strong><font face="Courier New"></font></strong></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                        <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"new"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"int"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"["</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">"]"</font></strong></span> </td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                        <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"new"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Identifier"><font color=#000000>Identifier</font></a> <span class=meta><em><font color=#ff0000 size=4>,</font></em></span>"(" <span class=meta><em><font color=#ff0000 size=4>,</font></em></span>")"</td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                        <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"!"</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a> </td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>|</font></em></span></td>
                        <td vAlign=baseline align=left><span class=key><strong><font face="Courier New">"("</font></strong></span><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <a href="http://cs.fit.edu/~ryan/cse4251/mini_java_grammar.html#Expression"><font color=#000000>Expression</font></a><span class=meta><em><font color=#ff0000 size=4>,</font></em></span> <span class=key><strong><font face="Courier New">")"</font></strong></span> </td>
                    </tr>
                    <tr>
                        <td vAlign=baseline align=right></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>;</font></em></span></td>
                        <td vAlign=baseline align=left><em><font color=#ff0000 size=4></font></em></td>
                    </tr>
                    <tr style="HEIGHT: 15px">
                        <td><em><font color=#ff0000 size=4></font></em></td>
                    </tr>
                    <!-- inter-row spacing -->
                </tbody>
                <!-- Identifier -->
                <tbody>
                    <tr>
                        <td vAlign=baseline align=right><a name=Identifier>Identifier</a></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>is</font></em></span></td>
                        <td vAlign=baseline align=left>one or more letters, digits, and underscores, starting with a letter </td>
                    </tr>
                </tbody>
                <!-- IntegerLiteral -->
                <tbody>
                    <tr>
                        <td vAlign=baseline align=right><a name=IntegerLiteral>IntegerLiteral</a></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>is</font></em></span></td>
                        <td vAlign=baseline align=left>one or more decimal digits </td>
                    </tr>
                </tbody>
                <!-- EOF -->
                <tbody>
                    <tr>
                        <td vAlign=baseline align=right><a name=EOF>EOF</a></td>
                        <td vAlign=baseline align=middle><span class=meta><em><font color=#ff0000 size=4>is</font></em></span></td>
                        <td vAlign=baseline align=left>a distinguished token returned by the scanner at end-of-file </td>
                    </tr>
                </tbody>
            </table>
            <h2>Comments</h2>
            Comments are <tt>//</tt> to end of line and <tt>/* ... */</tt>, just as in Java. The <tt>/* ... */</tt> comments do <em>not</em> nest in Java. For example,
            <pre>/*
            One commment
            /*  Nested comment */
            Bad things will happen
            */
            </pre>
            The second <tt>/*</tt> will be ignored (it is in a comment), and the first <tt>*/</tt> will terminate the comment. Now, "bad things will happen" as the remaining text is not a comment.
            <p>Appel, 2nd edition, page 484, describes comments in MiniJava as being nestable. This is an interesting exercise for the scanner, but is not required.
            <h2>EBNF</h2>
            <a href="http://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf"><font color=#000000>ISO/IEC 14977: 1996(E)</font></a>
            <ul>
                <li>Terminal symbols are quoted
                <li><span class=meta><em><font color=#ff0000 size=4>[</font></em></span> and <span class=meta><em><font color=#ff0000 size=4>]</font></em></span> indicate optional symbols
                <li><span class=meta><em><font color=#ff0000 size=4>{</font></em></span> and <span class=meta><em><font color=#ff0000 size=4>}</font></em></span> indicate repetition
                <li><span class=meta><em><font color=#ff0000 size=4>(</font></em></span> and <span class=meta><em><font color=#ff0000 size=4>)</font></em></span> group items together; the other brackets do too </li>
            </ul>
            <br>
<img src ="http://www.cppblog.com/ngaut/aggbug/48376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-04-28 20:25 <a href="http://www.cppblog.com/ngaut/archive/2008/04/28/48376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>inger语法图</title><link>http://www.cppblog.com/ngaut/archive/2008/03/23/45201.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 23 Mar 2008 11:31:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/03/23/45201.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/45201.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/03/23/45201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/45201.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/45201.html</trackback:ping><description><![CDATA[<table nof="LY" border="0" cellpadding="0" cellspacing="0" width="1036">
    <tbody>
        <tr align="left" valign="top">
        </tr>
        <tr align="left" valign="top">
            <td height="102"><br></td>
            <td width="550"><img  src="http://inger.sourceforge.net/assets/images/autogen/Inger_Syntax_Diagrams_NBanner.gif" id="Banner1" alt="Inger syntax diagrams" nof="B_H" border="0" height="102" width="550"></td>
            <td colspan="5"><br></td>
        </tr>
        <tr align="left" valign="top">
            <td height="576"><br></td>
            <td colspan="6" align="center" valign="middle" width="983"><img  src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams1.png" id="Picture1" border="0" height="576" width="983"></td>
        </tr>
        <tr align="left" valign="top">
            <td colspan="7" height="5"><br></td>
        </tr>
        <tr align="left" valign="top">
            <td height="704"><br></td>
            <td colspan="3" align="center" valign="middle" width="853"><img  src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams2.png" id="Picture2" border="0" height="704" width="853"></td>
            <td colspan="3"><br></td>
        </tr>
        <tr align="left" valign="top">
            <td colspan="7" height="23"><br></td>
        </tr>
        <tr align="left" valign="top">
            <td height="595"><br></td>
            <td colspan="5" align="center" valign="middle" width="980"><img  src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams3.png" id="Picture3" border="0" height="595" width="980"></td>
            <td><br></td>
        </tr>
        <tr align="left" valign="top">
            <td colspan="7" height="30"><br></td>
        </tr>
        <tr align="left" valign="top">
            <td height="524"><br></td>
            <td colspan="4" align="center" valign="middle" width="934"><img  src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams4.png" id="Picture4" border="0" height="524" width="934"></td>
            <td colspan="2"><br></td>
        </tr>
        <tr align="left" valign="top">
            <td colspan="7" height="33"><br></td>
        </tr>
        <tr align="left" valign="top">
            <td height="447"><br></td>
            <td colspan="2" align="center" valign="middle" width="644"><img  src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams5.png" id="Picture5" border="0" height="447" width="644"></td>
            <td colspan="4"><br></td>
        </tr>
    </tbody>
</table><img src ="http://www.cppblog.com/ngaut/aggbug/45201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-03-23 19:31 <a href="http://www.cppblog.com/ngaut/archive/2008/03/23/45201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>inger BNF</title><link>http://www.cppblog.com/ngaut/archive/2008/03/23/45200.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 23 Mar 2008 11:30:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/03/23/45200.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/45200.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/03/23/45200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/45200.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/45200.html</trackback:ping><description><![CDATA[<p><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif"><strong>Subcollections</strong> </font></p>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp; SET_TYPES = { "bool", "char", "float", "int", "string" }<br>&nbsp; SET_LITERALS = { &lt;boolean_literal&gt;, &lt;char_literal&gt;, &lt;float_literal&gt;, &lt;int_literal&gt;, &lt;string_literal&gt; }<br>&nbsp; SET_INSTRUCTIONS = { "label", "break", "continue", "if", "goto", "while", "do", "switch", "return", ";" }<br>&nbsp; SET_UNARIES = { "&amp;", "*", "~", "+", "-", "!" }<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">module </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  module:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "module" &lt;identifier&gt; ";" globals.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">globals </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  globals: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  globals: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  global globals.<br>&nbsp;&nbsp;  globals: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "extern" global globals.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">global </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  global:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  function.<br>&nbsp;&nbsp;  global:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  declaration.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">function </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  function:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  functionheader functionrest.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">functionheader </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  functionheader:&nbsp; &nbsp; &nbsp;  modifiers &lt;identifier&gt; ":" paramlist "-&gt;" returntype.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">functionrest </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  functionrest:&nbsp; &nbsp; &nbsp; &nbsp;  ";".<br>&nbsp;&nbsp;  functionrest:&nbsp; &nbsp; &nbsp; &nbsp;  block.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">modifiers: </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  modifiers: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  modifiers: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "start".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">paramlist </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  paramlist: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "void".<br>&nbsp;&nbsp;  paramlist: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  paramblock moreparamblocks.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">moreparamblocks </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  moreparamblocks: &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  moreparamblocks: &nbsp; &nbsp;  ";" paramblock moreparamblocks.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">paramblock </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  paramblock:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  type param moreparams.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">moreparams </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  moreparams:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  moreparams:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "," param moreparams.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">param </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  param: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  reference &lt;identifier&gt; dimensionblock.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">returntype </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  returntype:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  type reference dimensionblock.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">reference </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  reference: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  reference: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "*" reference.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">dimensionblock </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  dimensionblock:&nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  dimensionblock:&nbsp; &nbsp; &nbsp;  "[" "]" dimensionblock.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">block </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  block: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "{" code "}".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">code </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  code:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  code:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  block code<br>&nbsp;&nbsp;  code:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  statement code.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">statement </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "label" &lt;identifier&gt; ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "break" ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "continue" ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  expression ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  declarationblock ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "if" "(" expression ")" block elseblock<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "goto" &lt;identifier&gt; ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "while" "(" expression ")" "do" block<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "do" block "while" "(" expression ")" ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "switch" "(" expression ")" "{" switchcases "default" block "}"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "return" returnarg ";".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">returnarg </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  returnarg: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "(" expression ")".<br>&nbsp;&nbsp;  returnarg: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">elseblock </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  elseblock: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  elseblock: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "else" block.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">switchcases </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  switchcases: &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  switchcases: &nbsp; &nbsp; &nbsp; &nbsp;  "case" &lt;int_literal&gt; block swithcases.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">declarationblock </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  declarationblock:&nbsp; &nbsp;  type declaration restdeclarations.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restdeclarations </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restlocals:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restlocals:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "," declaration restdeclarations.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">declaration </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  local: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  reference &lt;identifier&gt; indexblock initializer.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">indexblock </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  indexblock:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  indexblock:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "[" &lt;int_literal&gt; "]" indexblock.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">initializer </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  initializer: &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  initializer: &nbsp; &nbsp; &nbsp; &nbsp;  "=" expression.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">expression </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  expression:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  logicalor restexpression.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restexpression </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restexpression:&nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restexpression:&nbsp; &nbsp; &nbsp;  "=" logicalor restexpression.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">logicalor </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  logicalor: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  logicaland restlogicalor.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restlogicalor </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restlogicalor: &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restlogicalor: &nbsp; &nbsp; &nbsp;  "||" logicaland restlogicalor.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">logicaland </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  logicaland:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  bitwiseor restlogicaland.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restlogicaland </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restlogicaland:&nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restlogicaland:&nbsp; &nbsp; &nbsp;  "&amp;&amp;" bitwiseor restlogicaland.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">bitwiseor </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  bitwiseor: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  bitwisexor restbitwiseor.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restbitwiseor </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restbitwiseor: &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restbitwiseor: &nbsp; &nbsp; &nbsp;  "|" bitwisexor restbitwiseor.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">bitwisexor </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  bitwisexor:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  bitwiseand restbitwisexor.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restbitwisexor </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restbitwisexor:&nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restbitwisexor:&nbsp; &nbsp; &nbsp;  "^" bitwiseand restbitwisexor.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">bitwiseand </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  bitwiseand:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  equality restbitwiseand.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restbitwiseand </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restbitwiseand:&nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restbitwiseand:&nbsp; &nbsp; &nbsp;  "&amp;" equality restbitwiseand.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">equality </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  equality:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  relation restequality.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restequality </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restequality:&nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restequality:&nbsp; &nbsp; &nbsp; &nbsp;  equalityoperator relation restequality.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">equalityoperator </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  equalityoperator:&nbsp; &nbsp;  "==".<br>&nbsp;&nbsp;  equalityoperator:&nbsp; &nbsp;  "!=".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">relation </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  relation:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  shift restrelation.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restrelation </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restrelation:&nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restrelation:&nbsp; &nbsp; &nbsp; &nbsp;  relationoperator shift restrelation.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">relationoperator </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  relationoperator:&nbsp; &nbsp;  "&lt;".<br>&nbsp;&nbsp;  relationoperator:&nbsp; &nbsp;  "&lt;=".<br>&nbsp;&nbsp;  relationoperator:&nbsp; &nbsp;  "&gt;".<br>&nbsp;&nbsp;  relationoperator:&nbsp; &nbsp;  "&gt;=".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">shift </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  shift: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  addition restshift.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restshift </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restshift: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restshift: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  shiftoperator addition restshift.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">shiftoperator </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  shiftoperator: &nbsp; &nbsp; &nbsp;  "&lt;&lt;".<br>&nbsp;&nbsp;  shiftoperator: &nbsp; &nbsp; &nbsp;  "&gt;&gt;".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">addition </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  addition:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  multiplication restaddition.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restaddition </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restaddition:&nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  restaddition:&nbsp; &nbsp; &nbsp; &nbsp;  additionoperator multiplication restaddition.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">additionoperator </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  additionoperator:&nbsp; &nbsp;  "+".<br>&nbsp;&nbsp;  additionoperator:&nbsp; &nbsp;  "-".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">multiplication </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  multiplication:&nbsp; &nbsp; &nbsp;  unary3 restmultiplication.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">restmultiplication </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  restmultiplication:&nbsp;  e.<br>&nbsp;&nbsp;  restmultiplication:&nbsp;  multiplicationoperator unary3 restmultiplication.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">multiplicationoperator </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  multiplicationoperator: "*".<br>&nbsp;&nbsp;  multiplicationoperator: "/".<br>&nbsp;&nbsp;  multiplicationoperator: "%".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">unary3 </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  unary3:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unary2<br>&nbsp;&nbsp;  unary3:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unary3operator unary3.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">unary3operator: </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  unary3operator:&nbsp; &nbsp; &nbsp;  "&amp;".<br>&nbsp;&nbsp;  unary3operator:&nbsp; &nbsp; &nbsp;  "*".<br>&nbsp;&nbsp;  unary3operator:&nbsp; &nbsp; &nbsp;  "~".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">unary2 </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  unary2:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  factor.<br>&nbsp;&nbsp;  unary2:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  unary2operator unary2.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">unary2operator </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  unary2operator:&nbsp; &nbsp; &nbsp;  "+".<br>&nbsp;&nbsp;  unary2operator:&nbsp; &nbsp; &nbsp;  "-".<br>&nbsp;&nbsp;  unary2operator:&nbsp; &nbsp; &nbsp;  "!".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">factor </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  factor:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &lt;identifier&gt; application.<br>&nbsp;&nbsp;  factor:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  immediate.<br>&nbsp;&nbsp;  factor:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "(" expression ")".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">application </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  application: &nbsp; &nbsp; &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  application: &nbsp; &nbsp; &nbsp; &nbsp;  "[" expression "]" application.<br>&nbsp;&nbsp;  application: &nbsp; &nbsp; &nbsp; &nbsp;  "(" expression moreexpressions ")".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">moreexpressions </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  moreexpressions: &nbsp; &nbsp;  e.<br>&nbsp;&nbsp;  moreexpressions: &nbsp; &nbsp;  "," expression morexpressions.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">type </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  type:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "bool".<br>&nbsp;&nbsp;  type:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "char".<br>&nbsp;&nbsp;  type:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "float".<br>&nbsp;&nbsp;  type:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "int".<br>&nbsp;&nbsp;  type:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "string".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">immediate </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  immediate: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &lt;boolean_literal&gt;.<br>&nbsp;&nbsp;  immediate: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &lt;char_literal&gt;.<br>&nbsp;&nbsp;  immediate: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &lt;float_literal&gt;.<br>&nbsp;&nbsp;  immediate: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &lt;int_literal&gt;.<br>&nbsp;&nbsp;  immediate: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &lt;string_literal&gt;.</font></pre><img src ="http://www.cppblog.com/ngaut/aggbug/45200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-03-23 19:30 <a href="http://www.cppblog.com/ngaut/archive/2008/03/23/45200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>inger EBNF</title><link>http://www.cppblog.com/ngaut/archive/2008/03/23/45198.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 23 Mar 2008 11:04:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/03/23/45198.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/45198.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/03/23/45198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/45198.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/45198.html</trackback:ping><description><![CDATA[<p><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif"><strong><em>Modules </em></strong></font></p>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">module </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  module:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "module" &lt;identifier&gt; ";" {[extern] global}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">global </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  global:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  function | declaration.<br>&nbsp;</font></pre>
<h3><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif"><em>Functions </em></font></h3>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">function </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  function:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  functionheader [ ";" | block ].<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">functionheader </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  functionheader:&nbsp; &nbsp; &nbsp;  ["start"] &lt;identifier&gt; ":" paramlist "-&gt;" returntype.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">paramlist </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  paramlist: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "void" | paramblock {";" paramblock}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">paramblock </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  paramblock:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  type param {"," param}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">param </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  param: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  {"*"} &lt;identifier&gt; {"[" "]"}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">returntype </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  returntype:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  type {"*"} {"[" "]"}.<br>&nbsp;</font></pre>
<h3><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif"><em>Blocks and statements </em></font></h3>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">block </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  block: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "{" { statement | block } "}".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">statement </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "label" &lt;identifier&gt; ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "break" ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "continue" ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  expression ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  declarationblock ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "if" "(" expression ")" block [ "else" block ].<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "goto" &lt;identifier&gt; ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "while" "(" expression ")" "do" block<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "do" block "while" "(" expression ")" ";"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "switch" "(" expression ")" "{" { "case" &lt;int_literal&gt; block } "default" block "}"<br>&nbsp;&nbsp;  statement: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "return" <u>"(" expression ")"<!--  End navbar  Page title  --><br><!--  Begin browse  $Id: browse.tmpl,v 1.22 2002/02/19 23:00:26 carstenklapp Exp $  --><br><a  href="http://inger.sourceforge.net/html/%22%28%22%20expression%20%22%29%22?action=edit"><img  src="http://inger.sourceforge.net/html/%5Cwiki%5Cthemes%5CMacOSX%5Cbuttons%5Cuww.png" id="Picture12" alt="?" align="bottom" border="0" height="5" hspace="0" vspace="0" width="5"></a></u> ";".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">declarationblock </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  declarationblock:&nbsp; &nbsp;  type declaration {"," declaration}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">declaration </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  local: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  {"*"} &lt;identifier&gt; {"[" &lt;int_literal&gt; "]"} [ "=" expression ].<br>&nbsp;</font></pre>
<h3><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif"><em>Expressions </em></font></h3>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Assignment </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  expression:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  logicalor {"=" logicalor expression}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Logical OR </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  logicalor: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  logicaland {"||" logicaland logicalor}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Logical AND </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  logicaland:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  bitwiseor {"&amp;&amp;" bitwiseor logicaland}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Bitwise OR </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  bitwiseor: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  bitwisexor {"|" bitwisexor bitwiseor}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Bitwise XOR </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  bitwisexor:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  bitwiseand {"^" bitwiseand bitwisexor}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Bitwise AND </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  bitwiseand:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  equality {"&amp;" equality bitwiseand}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Equality </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  equality:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  relation {("==" | "!=") relation equality}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Relation </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  relation:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  shift {("&lt;" | "&lt;=" | "&gt;" | "&gt;=") shift relation}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Bitwise shift </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  shift: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  addition {("&lt;&lt;" | "&gt;&gt;") addition shift}.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Addition/subtraction </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  addition:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  multiplication {("+" | "-") multiplication addition}<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Multiplication/division </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  multiplication:&nbsp; &nbsp; &nbsp;  unary3 {("*" | "/" | "%") unary3 multiplication}.<br>&nbsp;</font></pre>
<h3><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif"><em>Unary operations </em></font></h3>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Reference, indirection and bitwise complement </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  unary3:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  {("&amp;" | "*" | "~")} unary2.<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">Unary negation, unary plus and logical NOT </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  unary2:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  {("+" | "-" | "!")} factor.<br>&nbsp;</font></pre>
<h3><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif"><em>Factor and application </em></font></h3>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">factor </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  factor:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &lt;identifier&gt; [application] | immediate | "(" expression ")".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">application </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  application: &nbsp; &nbsp; &nbsp; &nbsp;  "[" expression "]" application | "(" expression {"," expression } ")".<br>&nbsp;</font></pre>
<h3><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif"><em>Types and immediates </em></font></h3>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">type </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  type:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  "bool" | "char" | "float" | "int" | "string".<br>&nbsp;</font></pre>
<h4><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">immediate </font></h4>
<pre><font face="Arial,Helvetica,Univers,Zurich BT,sans-serif">&nbsp;&nbsp;  immediate: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &lt;boolean_literal&gt; | &lt;char_literal&gt; | &lt;float_literal&gt; | &lt;int_literal&gt; | &lt;string_literal&gt;.</font></pre><img src ="http://www.cppblog.com/ngaut/aggbug/45198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-03-23 19:04 <a href="http://www.cppblog.com/ngaut/archive/2008/03/23/45198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>inger源码分析--预处理</title><link>http://www.cppblog.com/ngaut/archive/2008/01/05/40481.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sat, 05 Jan 2008 14:01:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/01/05/40481.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/40481.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/01/05/40481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/40481.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/40481.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preprocessorFilename = (char *) malloc( strlen( argv[optind] ) + 3 );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy( preprocessorFilename, argv[optind] );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat( preprocessorFilename, "_p" );</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Call the preprocessor. It will store its result in<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * preprocessorFilename. If the preprocessor could not<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * open the input file, skip this file.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 建立一个新文件，文件名为原来的.i文件加上.p,如果输入的<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件名是while.i,则生成的经过预处理的文件名为while.i_p，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里说的预处理和c语言是一样的，即将相应的头文件拷贝过来，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如#import "printint.ih"，则将#import "printint.ih"替换为<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printint.ih文件的内容<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = Preprocess( argv[optind], preprocessorFilename );</p>
<img src ="http://www.cppblog.com/ngaut/aggbug/40481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-01-05 22:01 <a href="http://www.cppblog.com/ngaut/archive/2008/01/05/40481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>inger源码笔记 杂乱</title><link>http://www.cppblog.com/ngaut/archive/2008/01/03/40366.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Thu, 03 Jan 2008 15:14:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2008/01/03/40366.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/40366.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2008/01/03/40366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/40366.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/40366.html</trackback:ping><description><![CDATA[先记在这里，有时间再来仔细整理：<br>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">词法分析：<br>关键字定义:</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">/* This enum contains all the keywords and operators<br>&nbsp;* used in the language.<br>&nbsp;*/<br>enum<br>{<br>&nbsp;&nbsp;&nbsp; /* Keywords */<br>&nbsp;&nbsp;&nbsp; KW_BREAK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 1000, /* "break" keyword */<br>&nbsp;&nbsp;&nbsp; KW_CASE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "case" keyword */<br>&nbsp;&nbsp;&nbsp; KW_CONTINUE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "continue" keyword */<br>&nbsp;&nbsp;&nbsp; KW_DEFAULT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "default" keyword */<br>&nbsp;&nbsp;&nbsp; KW_DO,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "do" keyword */<br>&nbsp;&nbsp;&nbsp; KW_ELSE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "else" keyword */<br>&nbsp;&nbsp;&nbsp; KW_EXTERN,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "extern" keyword */<br>&nbsp;&nbsp;&nbsp; KW_GOTO,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "goto" keyword */<br>&nbsp;&nbsp;&nbsp; KW_IF,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "if" keyword */<br>&nbsp;&nbsp;&nbsp; KW_LABEL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "label" keyword */<br>&nbsp;&nbsp;&nbsp; KW_MODULE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "module" keyword */<br>&nbsp;&nbsp;&nbsp; KW_RETURN,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "return"keyword */<br>&nbsp;&nbsp;&nbsp; KW_START,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "start" keyword */<br>&nbsp;&nbsp;&nbsp; KW_SWITCH,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "switch" keyword */<br>&nbsp;&nbsp;&nbsp; KW_WHILE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "while" keyword */</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp; /* Type identifiers */<br>&nbsp;&nbsp;&nbsp; KW_BOOL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "bool" identifier */<br>&nbsp;&nbsp;&nbsp; KW_CHAR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "char" identifier */<br>&nbsp;&nbsp;&nbsp; KW_FLOAT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "float" identifier */<br>&nbsp;&nbsp;&nbsp; KW_INT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "int" identifier */<br>&nbsp;&nbsp;&nbsp; KW_UNTYPED,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "untyped" identifier */<br>&nbsp;&nbsp;&nbsp; KW_VOID,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "void" identifier */</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp; /* Variable lexer tokens */<br>&nbsp;&nbsp;&nbsp; LIT_BOOL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* bool constant */<br>&nbsp;&nbsp;&nbsp; LIT_CHAR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* character constant */<br>&nbsp;&nbsp;&nbsp; LIT_FLOAT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* floating point constant */<br>&nbsp;&nbsp;&nbsp; LIT_INT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* integer constant */<br>&nbsp;&nbsp;&nbsp; LIT_STRING,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* string constant */<br>&nbsp;&nbsp;&nbsp; IDENTIFIER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* identifier */</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;&nbsp;&nbsp; /* Operators */<br>&nbsp;&nbsp;&nbsp; OP_ADD,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "+"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_ASSIGN,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "="&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_BITWISE_AND,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "&amp;" */<br>&nbsp;&nbsp;&nbsp; OP_BITWISE_COMPLEMENT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "~"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_BITWISE_LSHIFT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "&lt;&lt;" */<br>&nbsp;&nbsp;&nbsp; OP_BITWISE_OR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "|" */<br>&nbsp;&nbsp;&nbsp; OP_BITWISE_RSHIFT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "&gt;&gt;" */<br>&nbsp;&nbsp;&nbsp; OP_BITWISE_XOR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "^"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_DIVIDE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "/"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_EQUAL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "==" */<br>&nbsp;&nbsp;&nbsp; OP_GREATER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "&gt;"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_GREATEREQUAL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "&gt;=" */<br>&nbsp;&nbsp;&nbsp; OP_LESS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "&lt;"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_LESSEQUAL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "&lt;=" */<br>&nbsp;&nbsp;&nbsp; OP_LOGICAL_AND,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "&amp;&amp;" */<br>&nbsp;&nbsp;&nbsp; OP_LOGICAL_OR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "||" */<br>&nbsp;&nbsp;&nbsp; OP_MODULUS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "%"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_MULTIPLY,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "*"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_NOT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "!"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_NOTEQUAL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "!=" */<br>&nbsp;&nbsp;&nbsp; OP_SUBTRACT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "-"&nbsp; */<br>&nbsp;&nbsp;&nbsp; OP_TERNARY_IF,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "?"&nbsp; */<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; /* Delimiters */<br>&nbsp;&nbsp;&nbsp; ARROW,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "-&gt;" */<br>&nbsp;&nbsp;&nbsp; LBRACE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "{"&nbsp; */<br>&nbsp;&nbsp;&nbsp; RBRACE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "}"&nbsp; */<br>&nbsp;&nbsp;&nbsp; LBRACKET,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "["&nbsp; */<br>&nbsp;&nbsp;&nbsp; RBRACKET,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "]"&nbsp; */<br>&nbsp;&nbsp;&nbsp; COLON,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* ":"&nbsp; */<br>&nbsp;&nbsp;&nbsp; COMMA,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* ","&nbsp; */<br>&nbsp;&nbsp;&nbsp; LPAREN,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* "("&nbsp; */<br>&nbsp;&nbsp;&nbsp; RPAREN,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* ")"&nbsp; */<br>&nbsp;&nbsp;&nbsp; SEMICOLON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* ";"&nbsp; */<br>}<br>tokens;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&nbsp;</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span>&nbsp;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span>&nbsp;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span>&nbsp;</p>
<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><br>处理inger中的各种数据类型和标识符，如BOOL, unsigned long, float, char*,标识符等<br>typedef union<br>{<br>&nbsp;&nbsp;&nbsp; unsigned long&nbsp; uintvalue;<br>&nbsp;&nbsp;&nbsp; BOOL&nbsp;&nbsp;&nbsp; boolvalue;<br>&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp; *stringvalue;<br>&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp;&nbsp; charvalue;<br>&nbsp;&nbsp;&nbsp; float&nbsp;&nbsp; floatvalue;<br>&nbsp;&nbsp;&nbsp; char&nbsp;&nbsp; *identifier;<br>} Tokenvalue;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><br>树节点结构(注意：树节点和抽象语法树节点是不同的)：<br>typedef struct TreeNode<br>{<br>&nbsp;&nbsp;&nbsp; void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *data;<br>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; screenX;<br>&nbsp;&nbsp;&nbsp; struct TreeNode *parent;<br>&nbsp;&nbsp;&nbsp; List&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *children;&nbsp;//一系列孩子<br>} TreeNode;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">抽象语法树节点结构：<br>typedef struct AstNode<br>{<br>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id;&nbsp;&nbsp;//表示节点的类型，如while节点，module节点<br>&nbsp;&nbsp;&nbsp; Tokenvalue&nbsp; val;<br>&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *type;<br>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lineno;<br>} AstNode;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">抽象语法树的AstNode作为TreeNode的data成员保存，参考如下函数：<br>//参数id表示节点名，如：NODE_MODULE,NODE_GLOBAL等见nodenames.h<br>TreeNode *CreateAstNode( int id, int lineno )<br>{<br>&nbsp;&nbsp;&nbsp; TreeNode *treeNode;<br>&nbsp;&nbsp;&nbsp; AstNode *astNode;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; astNode = (AstNode *) MallocEx( sizeof( AstNode ) );<br>&nbsp;&nbsp;&nbsp; astNode-&gt;id = id;<br>&nbsp;&nbsp;&nbsp; astNode-&gt;lineno = lineno;<br>&nbsp;&nbsp;&nbsp; astNode-&gt;val.uintvalue = 0;<br>&nbsp;&nbsp;&nbsp; astNode-&gt;type = NULL;<br>&nbsp;&nbsp;&nbsp; treeNode = CreateTreeNode( astNode );</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; return( treeNode );<br>}<br>或者：<br>TreeNode *CreateAstNodeVal( int id, Tokenvalue val, int lineno )<br>{<br>&nbsp;&nbsp;&nbsp; TreeNode *treeNode;<br>&nbsp;&nbsp;&nbsp; AstNode *astNode;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; astNode = (AstNode *) MallocEx( sizeof( AstNode ) );<br>&nbsp;&nbsp;&nbsp; astNode-&gt;id = id;<br>&nbsp;&nbsp;&nbsp; astNode-&gt;lineno = lineno;<br>&nbsp;&nbsp;&nbsp; astNode-&gt;val = val;<br>&nbsp;&nbsp;&nbsp; astNode-&gt;type = NULL;<br>&nbsp;&nbsp;&nbsp; treeNode = CreateTreeNode( astNode );</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; return( treeNode );<br>}</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><br>//抽象语法树节点名<br>enum NodeNames <br>{<br>&nbsp;&nbsp;&nbsp; NODE_MODULE = 0,<br>&nbsp;&nbsp;&nbsp; NODE_START,<br>&nbsp;&nbsp;&nbsp; NODE_EXTERN,<br>&nbsp;&nbsp;&nbsp; NODE_GLOBAL,<br>&nbsp;&nbsp;&nbsp; NODE_FUNCTION,<br>&nbsp;&nbsp;&nbsp; NODE_FUNCTIONHEADER,<br>&nbsp;&nbsp;&nbsp; NODE_MODIFIERS,<br>&nbsp;&nbsp;&nbsp; NODE_PARAMLIST,<br>&nbsp;&nbsp;&nbsp; NODE_PARAMBLOCK,<br>&nbsp;&nbsp;&nbsp; NODE_PARAM,<br>&nbsp;&nbsp;&nbsp; NODE_RETURNTYPE,<br>&nbsp;&nbsp;&nbsp; NODE_DIMENSION,<br>&nbsp;&nbsp;&nbsp; NODE_DIMENSIONBLOCK,<br>&nbsp;&nbsp;&nbsp; NODE_BLOCK,<br>&nbsp;&nbsp;&nbsp; NODE_STATEMENT,<br>&nbsp;&nbsp;&nbsp; NODE_SWITCH,<br>&nbsp;&nbsp;&nbsp; NODE_CASES,<br>&nbsp;&nbsp;&nbsp; NODE_CASE,<br>&nbsp;&nbsp;&nbsp; NODE_WHILE,<br>&nbsp;&nbsp;&nbsp; NODE_GOTO,<br>&nbsp;&nbsp;&nbsp; NODE_LABEL,<br>&nbsp;&nbsp;&nbsp; NODE_IF,<br>&nbsp;&nbsp;&nbsp; NODE_IDENT,<br>&nbsp;&nbsp;&nbsp; NODE_RETURN,<br>&nbsp;&nbsp;&nbsp; NODE_CONTINUE,<br>&nbsp;&nbsp;&nbsp; NODE_BREAK,<br>&nbsp;&nbsp;&nbsp; NODE_DECLBLOCK,<br>&nbsp;&nbsp;&nbsp; NODE_DECLARATION,<br>&nbsp;&nbsp;&nbsp; NODE_INITIALIZER,<br>&nbsp;&nbsp;&nbsp; NODE_INDEXBLOCK,<br>&nbsp;&nbsp;&nbsp; NODE_REFERENCE,<br>&nbsp;&nbsp;&nbsp; NODE_INDEX,<br>&nbsp;&nbsp;&nbsp; NODE_EXPRESSION,<br>&nbsp;&nbsp;&nbsp; NODE_LOGICAL_OR,<br>&nbsp;&nbsp;&nbsp; NODE_LOGICAL_AND,<br>&nbsp;&nbsp;&nbsp; NODE_BITWISE_OR,<br>&nbsp;&nbsp;&nbsp; NODE_BITWISE_XOR,<br>&nbsp;&nbsp;&nbsp; NODE_BITWISE_AND,<br>&nbsp;&nbsp;&nbsp; NODE_EQUAL,<br>&nbsp;&nbsp;&nbsp; NODE_NOTEQUAL,<br>&nbsp;&nbsp;&nbsp; NODE_GREATER,<br>&nbsp;&nbsp;&nbsp; NODE_GREATEREQUAL,<br>&nbsp;&nbsp;&nbsp; NODE_LESS,<br>&nbsp;&nbsp;&nbsp; NODE_LESSEQUAL,<br>&nbsp;&nbsp;&nbsp; NODE_BITWISE_LSHIFT,<br>&nbsp;&nbsp;&nbsp; NODE_BITWISE_RSHIFT,<br>&nbsp;&nbsp;&nbsp; NODE_ASSIGN,<br>&nbsp;&nbsp;&nbsp; NODE_BINARY_ADD,<br>&nbsp;&nbsp;&nbsp; NODE_BINARY_SUBTRACT,<br>&nbsp;&nbsp;&nbsp; NODE_UNARY_ADD,<br>&nbsp;&nbsp;&nbsp; NODE_UNARY_SUBTRACT,<br>&nbsp;&nbsp;&nbsp; NODE_MULTIPLY,<br>&nbsp;&nbsp;&nbsp; NODE_DIVIDE,<br>&nbsp;&nbsp;&nbsp; NODE_MODULUS,<br>&nbsp;&nbsp;&nbsp; NODE_BITWISE_COMPLEMENT,<br>&nbsp;&nbsp;&nbsp; NODE_ADDRESS,<br>&nbsp;&nbsp;&nbsp; NODE_DEREFERENCE,<br>&nbsp;&nbsp;&nbsp; NODE_NOT,<br>&nbsp;&nbsp;&nbsp; NODE_APPLICATION,<br>&nbsp;&nbsp;&nbsp; NODE_INDEXER,<br>&nbsp;&nbsp;&nbsp; NODE_ARGUMENTS,<br>&nbsp;&nbsp;&nbsp; NODE_FACTOR,</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; NODE_BOOL,<br>&nbsp;&nbsp;&nbsp; NODE_CHAR,<br>&nbsp;&nbsp;&nbsp; NODE_FLOAT,<br>&nbsp;&nbsp;&nbsp; NODE_INT,<br>&nbsp;&nbsp;&nbsp; NODE_UNTYPED,<br>&nbsp;&nbsp;&nbsp; NODE_VOID,</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; NODE_LIT_BOOL,<br>&nbsp;&nbsp;&nbsp; NODE_LIT_CHAR,<br>&nbsp;&nbsp;&nbsp; NODE_LIT_FLOAT,<br>&nbsp;&nbsp;&nbsp; NODE_LIT_INT,<br>&nbsp;&nbsp;&nbsp; NODE_LIT_STRING,<br>&nbsp;&nbsp;&nbsp; NODE_LIT_IDENTIFIER,</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; NODE_INT_TO_FLOAT,<br>&nbsp;&nbsp;&nbsp; NODE_CHAR_TO_INT,<br>&nbsp;&nbsp;&nbsp; NODE_CHAR_TO_FLOAT,</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; NODE_UNKNOWN = -1<br>};</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><br>输出抽象语法树：<br>/*<br>&nbsp;* PRINTING ROUTINES<br>&nbsp;*/<br>void PrintAst( TreeNode *source )<br>{<br>&nbsp;&nbsp;&nbsp; PrintTree( source, GetAstNodeData, 4 );<br>}<br>PrintTree的实现如下，这里传递的参数levels等于4<br>void PrintTree( TreeNode *source, DataFunction dataFunction, int levels )<br>{<br>&nbsp;&nbsp;&nbsp; int printDepth = 0;<br>&nbsp;&nbsp;&nbsp; BOOL loop;<br>&nbsp;&nbsp;&nbsp; char *str;<br>&nbsp;&nbsp;&nbsp; int i;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; /* TODO: We're going to have to make a new macro.<br>&nbsp;&nbsp;&nbsp;&nbsp; * Don't use DEBUG for this.<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; DEBUG( "Called\n" );</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; /* If tree is empty, abort. */<br>&nbsp;&nbsp;&nbsp; if( source == NULL )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>&nbsp;&nbsp;&nbsp; }</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; /* Walk through tree to determine x-offsets for<br>&nbsp;&nbsp;&nbsp;&nbsp; * each node.<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; LayoutTree( source, LEFT_OFFSET );</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">/* Print nodes. */<br>依次通过调用函数指针dataFunction所指向的函数(实际上是函数GetAstNodeData)<br>来输出每个节点的节点名，节点的token的值，类型名，以及行号，参考下面的GetAstNodeData函数</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; for( i = 0; i &lt; levels; i++ )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = dataFunction( source, i );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintChars( source-&gt;screenX - strlen( str ) / 2, ' ' );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf( "%s\n", str );<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; PrintChars( source-&gt;screenX, ' ' );<br>&nbsp;&nbsp;&nbsp; printf( "%c", VERTBAR );</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; printDepth = 0;<br>&nbsp;&nbsp;&nbsp; do<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentX = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintNode( source, 0, printDepth, 0, dataFunction, 0 );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentX = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintNode( source, 0, printDepth, 1, dataFunction, 0 );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentX = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for( i = 0; i &lt; levels; i++ )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrintNode( source, 0, printDepth, 2, dataFunction, i );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; currentX = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loop = PrintNode( source, 0, printDepth, 3, dataFunction, 0 );<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printDepth++;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; while( loop );<br>}</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">添加一个孩子的操作只需要将新节点插入到孩子链表尾部即可<br>void AddTreeChild( TreeNode *parentnode, TreeNode *node )<br>{<br>&nbsp;&nbsp;&nbsp; /* Do not act on an empty node. */<br>&nbsp;&nbsp;&nbsp; if( node == NULL ) return;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp; /* If the tree is empty, add the first root node. */<br>&nbsp;&nbsp;&nbsp; if( parentnode == NULL )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node-&gt;parent = NULL;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; /* Tree is not empty. Add the new node to [parentnode]'s<br>&nbsp;&nbsp;&nbsp;&nbsp; * children list. */<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node-&gt;parent = parentnode;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListAppend( parentnode-&gt;children, node );<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">而RemoveAstNode则删除整个子树<br>/* Remove node [node] from ast. The node contents<br>&nbsp;* and its children get deleted.<br>&nbsp;*<br>&nbsp;* Pre:&nbsp; [node] is not NULL.<br>&nbsp;*/<br>void RemoveAstNode( TreeNode *node );</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><br>inger编译流程：<br>1.&nbsp;预处理，关键函数为Preprocess<br>2.&nbsp;语法分析，构建抽象语法树，关键函数Parse，Parse也是构造抽象语法树的入口函数，如果语法分析没有发现错误则跳到第3步<br>3.&nbsp;根据抽象语法树来建立符号表关键函数为CreateSymbolTable( ast );<br>4.&nbsp;语义分析，关键函数：<br>a)&nbsp;CheckLeftValues( ast );<br>b)&nbsp;CheckArgCount( ast );<br>c)&nbsp;CheckSwitchStatements( ast );<br>d)&nbsp;CheckFunctionReturns( ast );</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt">5.&nbsp; 根据抽象语法树生成代码，关键函数GenerateCode( ast );</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><br></span>&nbsp;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.cppblog.com/ngaut/aggbug/40366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2008-01-03 23:14 <a href="http://www.cppblog.com/ngaut/archive/2008/01/03/40366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个简单的递归下降分析表达式的例子</title><link>http://www.cppblog.com/ngaut/archive/2007/12/25/39612.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Tue, 25 Dec 2007 11:36:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/12/25/39612.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/39612.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/12/25/39612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/39612.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/39612.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 好友学习递归时无法理解用递归下降的方式分析表达式，所以写了个简单的例子，为了使代码尽可能简单，省略了此法分析模块，直接使用人脑分析的词法^_^由于好友不懂c++，所以这里虽然用的c++，但还是按照c的方式写的代码。#include&nbsp;&lt;vector&gt;#include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;assert.h&gt;usi...&nbsp;&nbsp;<a href='http://www.cppblog.com/ngaut/archive/2007/12/25/39612.html'>阅读全文</a><img src ="http://www.cppblog.com/ngaut/aggbug/39612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ngaut/" target="_blank">ngaut</a> 2007-12-25 19:36 <a href="http://www.cppblog.com/ngaut/archive/2007/12/25/39612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用的正则表达式(转)</title><link>http://www.cppblog.com/ngaut/archive/2007/03/13/19707.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Tue, 13 Mar 2007 04:54:00 GMT</pubDate><guid>http://www.cppblog.com/ngaut/archive/2007/03/13/19707.html</guid><wfw:comment>http://www.cppblog.com/ngaut/comments/19707.html</wfw:comment><comments>http://www.cppblog.com/ngaut/archive/2007/03/13/19707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/ngaut/comments/commentRss/19707.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ngaut/services/trackbacks/19707.html</trackback:ping><description><![CDATA[
		<p>
				<span style="color: rgb(0, 0, 0);">        常用的正则表达式(转)<br /></span>
		</p>
		<p>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^\d+$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">非负整数（正整数 + 0） </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^[0-9]*[1-9][0-9]*$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">正整数 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^((-\d+)|(0+))$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">非正整数（负整数 + 0） </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^-[0-9]*[1-9][0-9]*$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">负整数 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^-?\d+$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">整数 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^\d+(\.\d+)?$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">非负浮点数（正浮点数 + 0） </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">正浮点数 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^((-\d+(\.\d+)?)|(0+(\.0+)?))$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">非正浮点数（负浮点数 + 0） </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">负浮点数 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^(-?\d+)(\.\d+)?$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">浮点数 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^[A-Za-z]+$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">由26个英文字母组成的字符串 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^[A-Z]+$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">由26个英文字母的大写组成的字符串 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^[a-z]+$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">由26个英文字母的小写组成的字符串 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^[A-Za-z0-9]+$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">由数字和26个英文字母组成的字符串 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^\w+$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">由数字、26个英文字母或者下划线组成的字符串 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">email地址 </span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">　　</span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">url</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" target="_blank">
						</a>
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">/^</span>
				<span style="color: rgb(0, 0, 0);">(d</span>
				<span id="Codehighlighter1_768_770_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<a href="http://www.cnblogs.com/Images/dot.gif" target="_blank">
						</a>
				</span>
				<span id="Codehighlighter1_768_770_Open_Text">
						<span style="color: rgb(0, 0, 0);">{</span>
						<span style="color: rgb(0, 0, 0);">2</span>
						<span style="color: rgb(0, 0, 0);">}</span>
				</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">d</span>
				<span id="Codehighlighter1_774_776_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<a href="http://www.cnblogs.com/Images/dot.gif" target="_blank">
						</a>
				</span>
				<span id="Codehighlighter1_774_776_Open_Text">
						<span style="color: rgb(0, 0, 0);">{</span>
						<span style="color: rgb(0, 0, 0);">4</span>
						<span style="color: rgb(0, 0, 0);">}</span>
				</span>
				<span style="color: rgb(0, 0, 0);">)</span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);">((</span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">([</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);">9</span>
				<span style="color: rgb(0, 0, 0);">]</span>
				<span id="Codehighlighter1_788_790_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<a href="http://www.cnblogs.com/Images/dot.gif" target="_blank">
						</a>
				</span>
				<span id="Codehighlighter1_788_790_Open_Text">
						<span style="color: rgb(0, 0, 0);">{</span>
						<span style="color: rgb(0, 0, 0);">1</span>
						<span style="color: rgb(0, 0, 0);">}</span>
				</span>
				<span style="color: rgb(0, 0, 0);">))</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">(</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">[</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">2</span>
				<span style="color: rgb(0, 0, 0);">]))</span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);">(([</span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);">2</span>
				<span style="color: rgb(0, 0, 0);">]([</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);">9</span>
				<span style="color: rgb(0, 0, 0);">]</span>
				<span id="Codehighlighter1_817_819_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<a href="http://www.cnblogs.com/Images/dot.gif" target="_blank">
						</a>
				</span>
				<span id="Codehighlighter1_817_819_Open_Text">
						<span style="color: rgb(0, 0, 0);">{</span>
						<span style="color: rgb(0, 0, 0);">1</span>
						<span style="color: rgb(0, 0, 0);">}</span>
				</span>
				<span style="color: rgb(0, 0, 0);">))</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">(</span>
				<span style="color: rgb(0, 0, 0);">3</span>
				<span style="color: rgb(0, 0, 0);">[</span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">]))$</span>
				<span style="color: rgb(0, 0, 0);">/</span>
				<span style="color: rgb(0, 0, 0);">   </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">  年-月-日</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" target="_blank">
						</a>
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">/^</span>
				<span style="color: rgb(0, 0, 0);">((</span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">([</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);">9</span>
				<span style="color: rgb(0, 0, 0);">]</span>
				<span id="Codehighlighter1_858_860_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<a href="http://www.cnblogs.com/Images/dot.gif" target="_blank">
						</a>
				</span>
				<span id="Codehighlighter1_858_860_Open_Text">
						<span style="color: rgb(0, 0, 0);">{</span>
						<span style="color: rgb(0, 0, 0);">1</span>
						<span style="color: rgb(0, 0, 0);">}</span>
				</span>
				<span style="color: rgb(0, 0, 0);">))</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">(</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">[</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">2</span>
				<span style="color: rgb(0, 0, 0);">]))</span>
				<span style="color: rgb(0, 0, 0);">/</span>
				<span style="color: rgb(0, 0, 0);">(([</span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);">2</span>
				<span style="color: rgb(0, 0, 0);">]([</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">-</span>
				<span style="color: rgb(0, 0, 0);">9</span>
				<span style="color: rgb(0, 0, 0);">]</span>
				<span id="Codehighlighter1_888_890_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<a href="http://www.cnblogs.com/Images/dot.gif" target="_blank">
						</a>
				</span>
				<span id="Codehighlighter1_888_890_Open_Text">
						<span style="color: rgb(0, 0, 0);">{</span>
						<span style="color: rgb(0, 0, 0);">1</span>
						<span style="color: rgb(0, 0, 0);">}</span>
				</span>
				<span style="color: rgb(0, 0, 0);">))</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">(</span>
				<span style="color: rgb(0, 0, 0);">3</span>
				<span style="color: rgb(0, 0, 0);">[</span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">1</span>
				<span style="color: rgb(0, 0, 0);">]))</span>
				<span style="color: rgb(0, 0, 0);">/</span>
				<span style="color: rgb(0, 0, 0);">(d</span>
				<span id="Codehighlighter1_908_910_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<a href="http://www.cnblogs.com/Images/dot.gif" target="_blank">
						</a>
				</span>
				<span id="Codehighlighter1_908_910_Open_Text">
						<span style="color: rgb(0, 0, 0);">{</span>
						<span style="color: rgb(0, 0, 0);">2</span>
						<span style="color: rgb(0, 0, 0);">}</span>
				</span>
				<span style="color: rgb(0, 0, 0);">|</span>
				<span style="color: rgb(0, 0, 0);">d</span>
				<span id="Codehighlighter1_914_916_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);">
						<a href="http://www.cnblogs.com/Images/dot.gif" target="_blank">
						</a>
				</span>
				<span id="Codehighlighter1_914_916_Open_Text">
						<span style="color: rgb(0, 0, 0);">{</span>
						<span style="color: rgb(0, 0, 0);">4</span>
						<span style="color: rgb(0, 0, 0);">}</span>
				</span>
				<span style="color: rgb(0, 0, 0);">)$</span>
				<span style="color: rgb(0, 0, 0);">/</span>
				<span style="color: rgb(0, 0, 0);">   </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> 月/日/年</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">   </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">Emil</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">     </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">电话号码</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank">
						</a>
				</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">   </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);">IP地址</span>
				<br />
		</p>
		<p> </p>
		<p>匹配中文字符的正则表达式： [\u4e00-\u9fa5]<br />匹配双字节字符(包括汉字在内)：[^\x00-\xff]<br />匹配空行的正则表达式：\n[\s| ]*\r<br />匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/<br />匹配首尾空格的正则表达式：(^\s*)|(\s*$)<br />匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<br />匹配网址URL的正则表达式：^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$<br />匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$<br />匹配国内电话号码：(\d{3}-|\d{4}-)?(\d{8}|\d{7})?<br />匹配腾讯QQ号：^[1-9]*[1-9][0-9]*$<br /></p>
		<p>
				<u>下表是元字符及其在正则表达式上下文中的行为的一个完整列表： <br /></u>
				<br />
				<strong>\</strong> 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。<br /><br /><strong>^</strong> 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性，^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。 <br /><br /><strong>$</strong> 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性，$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。 <br /><br /><strong>*</strong> 匹配前面的子表达式零次或多次。 <br /><br /><strong>+</strong> 匹配前面的子表达式一次或多次。+ 等价于 {1,}。 <br /><br /><strong>?</strong> 匹配前面的子表达式零次或一次。? 等价于 {0,1}。 <br /><br /><strong>{n}</strong> n 是一个非负整数，匹配确定的n 次。<br /><br /><strong>{n,}</strong> n 是一个非负整数，至少匹配n 次。 <br /><br /><strong>{n,m}</strong> m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。<br /><br /><strong>?</strong> 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。 <br /><br /><strong>.</strong> 匹配除 "\n" 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符，请使用象 ’[.\n]’ 的模式。 <br /><strong>(pattern)</strong> 匹配pattern 并获取这一匹配。 <br /><br /><strong>(?:pattern)</strong> 匹配pattern 但不获取匹配结果，也就