﻿<?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++博客-岁月流转，往昔空明</title><link>http://www.cppblog.com/lingjingqiu/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 05 Sep 2008 07:11:51 GMT</lastBuildDate><pubDate>Fri, 05 Sep 2008 07:11:51 GMT</pubDate><ttl>60</ttl><item><title>SoftArt Shader Language Syntax EBNF</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/07/25/57100.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Thu, 24 Jul 2008 18:25:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/07/25/57100.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/57100.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/07/25/57100.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/57100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/57100.html</trackback:ping><description><![CDATA[经过一晚上的整理，把 <a style="color: #0817ff;" href="http://sourceforge.net/projects/softart/">SoftArt</a> Shader Language 的 EBNF 弄出来了。<br>主要参照的是 <a style="color: #0817ff;" href="http://www.externsoft.ch/download/cpp-iso.html">ISO C++的EBNF</a> 。<br>由于ISO C++并不是一个LALR(1)能够解决的问题，因此不知道这个C++ EBNF的简化版能否在YACC上比较方便的实现。<br>如果不能实现，我会先考虑修正语法满足需要，而不是手写编译器，我还没那个能耐。<br><br>Flex 与 Bison 的 <span style="color: #0817ff;"></span><a  href="http://www.cppblog.com/Files/lingjingqiu/flex&amp;bison.rar"><span style="color: #0817ff;">下载地址</span></a><br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%; font-family: courier new;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">//SASL:&nbsp;SoftArt&nbsp;Shader&nbsp;Language<br><br>Syntax<br><br>Program&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DeclSeq<br><br>//////////////////////////////////<br>//Declaration<br>//////////////////////////////////<br>DeclSeq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Decl&nbsp;|&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeclSeq&nbsp;Decl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>Decl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;BlockDecl&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FunctioDef<br><br>Declarator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DirectDecl&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">SemanticSpec</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">RegisterSpec</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;"><br><br>DirectDecl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DeclId&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DirectDecl&nbsp;'('&nbsp;ParamDeclClause&nbsp;')'|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DirectDecl&nbsp;'</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">'&nbsp;[ConstExp</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;']'|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'('&nbsp;Declarator&nbsp;')'<br><br>CvQualifierSeq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CvQualifier&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">CvQualifierSeq</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;"><br><br>CvQualifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'const'&nbsp;|&nbsp;'uniform'<br><br>SemanticSpec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;':'&nbsp;Semantic<br><br>RegisterSpec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;':'&nbsp;'register'&nbsp;'('&nbsp;Register&nbsp;')'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>BlockDecl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SimpleDecl<br><br>SimpleDecl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">DeclSpecSeq</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">InitDeclList</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;'</span><span style="color: #008000;">;</span><span style="color: #008000;">'</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>AbsDecl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DirectAbsDecl<br><br>DirectAbsDecl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">DirectAbsDecl</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;'('&nbsp;ParamDeclClause&nbsp;')'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">DirectAbsDecl</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;'</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">'&nbsp;[ConstExp</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;']'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'('&nbsp;AbsDecl&nbsp;')'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>DeclSpecSeq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">DeclSpecSeq</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;DeclSpec<br><br>InitDeclList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;InitDecl&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitDeclList&nbsp;'</span><span style="color: #000000;">,</span><span style="color: #000000;">'&nbsp;InitDecl<br><br>InitDecl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Declarator&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">Init</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;"><br><br>Init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;InitClause&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;ExpList)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>InitClause&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AssignmentExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'{'&nbsp;InitList&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">','</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;'}'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'{'&nbsp;'}'<br>InitList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;InitClause&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitList&nbsp;'</span><span style="color: #000000;">,</span><span style="color: #000000;">'&nbsp;InitClause<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>DeclSpec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;TypeSpec<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>TypeSpec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;SimpleTypeSpec&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassSpec<br><br>SimpleTypeSpec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;'int'&nbsp;|&nbsp;'half'&nbsp;|&nbsp;'float'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'int2'&nbsp;|&nbsp;'half2'&nbsp;|&nbsp;'float2'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'int3'&nbsp;|&nbsp;'half3'&nbsp;|&nbsp;'float3'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'int4'&nbsp;|&nbsp;'half4'&nbsp;|&nbsp;'float4'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'float4x4'<br><br>/////////////////////////////<br>//Function<br>/////////////////////////////<br>FunctionDef&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">DeclSpecSeq</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;Declarator&nbsp;FunctionBody<br><br>FunctionBody&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CompoundStatement<br><br>/////////////////////////////<br>//Statements<br>/////////////////////////////<br>CompoundStatement&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'{'&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">StatementSeq</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;'}'<br><br>StatementSeq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Statement&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StatementSeq&nbsp;Statement<br><br>Statement&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ExpStatement&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CompountStatement&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectionStatement&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IterationStatement&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeclStatement<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>ExpStatement&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">&nbsp;Expression&nbsp;</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;'</span><span style="color: #008000;">;</span><span style="color: #008000;">'</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>SelectionStatement&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'if'&nbsp;'('&nbsp;Condition&nbsp;')'&nbsp;Statement&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'if'&nbsp;'('&nbsp;Condition&nbsp;')'&nbsp;Statement&nbsp;'else'&nbsp;Statement<br><br>IterationStatement&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'while'&nbsp;'('&nbsp;Condition&nbsp;')'&nbsp;Statement&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'do'&nbsp;Statement&nbsp;'while'&nbsp;'('&nbsp;Expression&nbsp;')'&nbsp;'</span><span style="color: #008000;">;</span><span style="color: #008000;">'</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'for'&nbsp;'('&nbsp;ForInitStatement&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">Condition</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;'</span><span style="color: #008000;">;</span><span style="color: #008000;">'&nbsp;[&nbsp;Expression&nbsp;]&nbsp;')'&nbsp;Statement</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>Condition&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Expression&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TypeSpecSeq&nbsp;Declarator&nbsp;'</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;AssignmentExp<br><br>ForInitStatement&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ExpStatement&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDecl<br><br>DeclStatement&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;BlockDecl<br><br>/////////////////////////////&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>//Parameter<br>/////////////////////////////<br>ParamDeclClause&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">&nbsp;ParamDeclList&nbsp;</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;"><br><br>ParamDeclList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ParamDecl&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamDeclList&nbsp;'</span><span style="color: #000000;">,</span><span style="color: #000000;">'&nbsp;ParamDecl<br><br>ParamDecl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DeclSpecSeq&nbsp;Delarator&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeclSpecSeq&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">AbsDecl</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;"><br><br><br>/////////////////////////////<br>//Class&nbsp;And&nbsp;Struct<br>/////////////////////////////<br>ClassSpec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ClassHead&nbsp;'{'&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">&nbsp;MemberSpec&nbsp;</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;'}'<br><br>ClassHead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'struct'&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">&nbsp;Identifier&nbsp;</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;"><br><br>MemberSpec&nbsp;&nbsp;&nbsp;&nbsp;`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;MemberDecl&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">MemberSpec</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;"><br><br>MemberDeclaration&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">DeclSpecSeq</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">MemberDeclList</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;"><br><br>MemberDeclList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;MemberDecl&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemberDeclList&nbsp;'</span><span style="color: #000000;">,</span><span style="color: #000000;">'&nbsp;MemberDeclarator<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>MemberDeclarator&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;Declarator&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">&nbsp;PureSpec&nbsp;</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Declarator&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">&nbsp;ConstInit&nbsp;</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">&nbsp;Identifier&nbsp;</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;':'&nbsp;ConstExp<br><br><br><br>//////////////////////////////////////<br>//Expressions<br>//////////////////////////////////////<br>Expression&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AssignmentExp<br><br>ConstExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CondExp<br><br>AssignmentExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CondExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogicalOrExp&nbsp;AssignmentOp&nbsp;AssignmentExp<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>CondExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;LogicalOrExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogicalOrExp&nbsp;'?'&nbsp;Expression&nbsp;':'&nbsp;AssignmentExp<br><br>LogicalOrExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;LogicalAndExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogicalOrExp&nbsp;'||'&nbsp;LogicalAndExp<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>LogicalAndExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;InclusiveOrExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogicalAndExp&nbsp;'&amp;&amp;'&nbsp;InclusiveOrExp<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>InclusiveOrExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ExclusiveOrExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InclusiveOrExp&nbsp;'|'&nbsp;ExclusiveOrExp<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>ExclusiveOrExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AndExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExclusiveOrExp&nbsp;'^'&nbsp;AndExp<br><br>AndExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;EqualExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AndExp&nbsp;'&amp;'&nbsp;EqualExp<br><br>EqualExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;RelExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EqualExp&nbsp;'</span><span style="color: #000000;">==</span><span style="color: #000000;">'&nbsp;RelExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EqualExp&nbsp;'!</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;RelExp<br><br>RelExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ShiftExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RelExp&nbsp;'&lt;'&nbsp;ShiftExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RelExp&nbsp;'&gt;'&nbsp;ShiftExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RelExp&nbsp;'&lt;</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;ShiftExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RelExp&nbsp;'&gt;</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;ShiftExp<br><br>ShiftExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AddExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShiftExp&nbsp;'&lt;&lt;'&nbsp;AddExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShiftExp&nbsp;'&gt;&gt;'&nbsp;AddExp<br><br>AddExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;MulExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddExp&nbsp;'+'&nbsp;MulExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddExp&nbsp;'-'&nbsp;MulExp<br><br>MulExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;PmExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MulExp&nbsp;'*'&nbsp;PmExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MulExp&nbsp;'/'&nbsp;PmExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MulExp&nbsp;'%'&nbsp;PmExp<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>PmExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CastExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PmExp&nbsp;'.*'&nbsp;CastExp<br><br>CastExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;UnaryExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'('&nbsp;TypeId&nbsp;')'&nbsp;CastExp<br><br>UnaryExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;PostfixExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'++'&nbsp;CastExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'--'&nbsp;CastExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UnaryOp&nbsp;CastExp<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>PostfixExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;PrimaryExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostfixExp&nbsp;'</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">'&nbsp;Expression&nbsp;'</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostfixExp&nbsp;'('&nbsp;Expression&nbsp;')'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostfixExp&nbsp;'('&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">&nbsp;ExpList&nbsp;</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;')'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleTypeSpec&nbsp;'('&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">&nbsp;ExpList&nbsp;</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;')'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostfixExp&nbsp;'++'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostfixExp&nbsp;'--'<br><br>PrimaryExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Literal&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'('&nbsp;Expression&nbsp;')'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IdExp<br><br>IdExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;UnqualifiedId<br><br>ExpList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AssigmentExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExpList&nbsp;'</span><span style="color: #000000;">,</span><span style="color: #000000;">'&nbsp;AssignmentExp<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>//////////////////////////////<br>//Identifier<br>//////////////////////////////<br>DeclId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;IdExp&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TypeName<br><br>UnqualifiedId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Identifier<br><br>Identifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NonDigit&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identifier&nbsp;NonDigit&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identifier&nbsp;Digit<br><br>//////////////////////////////<br>//Literals<br>//////////////////////////////<br>Literal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;IntLiteral&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FloatLiteral&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BoolLitreral<br><br>IntLiteral&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DemicalLiteral<br><br>DemicalLiteral&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NonZeroDigit&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DemicalLiteral&nbsp;|&nbsp;Digit<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>FloatLiteral&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FracConstant&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">ExponentPart</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigitSeq&nbsp;ExponentPart<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>BoolLiteral&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'false'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'true'<br><br>FracConstant&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">DigitSeq</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;'.'&nbsp;DigitSeq&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigitSeq&nbsp;'.'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>ExponentPart&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'e'&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">Sign</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;DigitSeq&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'E'&nbsp;</span><span style="color: #800000; font-weight: bold;">[</span><span style="color: #800000;">Sign</span><span style="color: #800000; font-weight: bold;">]</span><span style="color: #000000;">&nbsp;DigitSeq<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>DigitSeq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Digit&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigitSeq&nbsp;Digit<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>//////////////////////////<br>//Terminals<br>//////////////////////////<br><br>NonDigit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AlphaChar&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'_'<br><br>NonZeroDigit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'</span><span style="color: #000000;">1</span><span style="color: #000000;">'&nbsp;|&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;|&nbsp;'</span><span style="color: #000000;">9</span><span style="color: #000000;">'<br><br>AssignmentOp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;'</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;|&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'*</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;&nbsp;|&nbsp;'/</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;&nbsp;|&nbsp;'%</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;&nbsp;|&nbsp;'-</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&gt;&gt;</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;|&nbsp;'&lt;&lt;</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;|<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&amp;</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;&nbsp;|&nbsp;'^</span><span style="color: #000000;">=</span><span style="color: #000000;">'&nbsp;&nbsp;|&nbsp;'|</span><span style="color: #000000;">=</span><span style="color: #000000;">'<br>Register<br>Semantic<br>Digit<br>AlphaChar<br>Keyword</span></div>
<br><br>有点儿参差不齐，哈哈。一些Terminator我就没有写了。预处理的部分由于使用Boost.Wave，因此也没有加入到EBNF中。这些都很大程度上简化了EBNF的内容。<br>然后大概的根据层次归了一下类，看起来要方便一点。<br>但愿语法树里面没有漏掉的。<br>等回到自己机器上就开始自下向上的实现这个东西了，争取10月份之前能把整个Shader编译器集成到SoftArt里面去。<br>目前就让它在SVN的SandBox里面待着好了。<br>  <img src ="http://www.cppblog.com/lingjingqiu/aggbug/57100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-07-25 02:25 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/07/25/57100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始写EBNF Grammar for SoftArt Shader Language</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/07/25/57096.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Thu, 24 Jul 2008 16:11:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/07/25/57096.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/57096.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/07/25/57096.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/57096.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/57096.html</trackback:ping><description><![CDATA[最近在做Shader的编译器。<br><br>想好了我的编译器就叫SASL，SoftArt Shader Language。<br>因为之前没写过EBNF，没什么经验，因此找了C和C++的EBNF在参考。<br>特别是C的EBNF。<br>因为可以用LALR(1)实现，因此对我这样用LEX + YACC的人而言就更加有用一点。<br>整体而言准备尽可能和SM4.0一致，用Boost.Wave支持Preprocessing。<br>这样的话差不多就全了。这两天先把Shader的EBNF弄出来，完了开始从小往大写慢慢写语法分析器和编译器。<br><br><a  href="http://www.externsoft.ch/download/cpp-iso.html">http://www.externsoft.ch/download/cpp-iso.html</a><br><br>这里是C++的EBNF。有点太复杂了觉得。。。<br><br><br><br> <img src ="http://www.cppblog.com/lingjingqiu/aggbug/57096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-07-25 00:11 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/07/25/57096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>再用Boost.Python</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/07/14/56123.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Mon, 14 Jul 2008 11:05:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/07/14/56123.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/56123.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/07/14/56123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/56123.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/56123.html</trackback:ping><description><![CDATA[上次用boost.python的时候boost还是1.33的时候。<br><br>那个时候刚刚开始看shader的东西，就用boost.python做了用python做shader语言的演示。<br>其实当时看boost.python完全是半懂不懂的。<br>这段时间找了个C的数值库，要Python的接口，Python For C的Interface又懒得使用，还是用boost.python把一些我要的功能给封装出来好了。<br>结果一看才发现对Boost.Python的理解好了不好。<br><br>看来人都是在慢慢进步的。。。哈哈。<br><br><img src ="http://www.cppblog.com/lingjingqiu/aggbug/56123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-07-14 19:05 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/07/14/56123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个3D骨骼动画 2D版超精简Demo，原理和实现几乎同3D一致</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/06/07/52463.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Sat, 07 Jun 2008 11:35:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/06/07/52463.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/52463.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/06/07/52463.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/52463.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/52463.html</trackback:ping><description><![CDATA[<br>以前看D3D的时候，就发现骨骼动画是个有点难以掌握的东西。<br>但是也可以说，骨骼动画是3D齐次空间变换的集大成者，掌握了骨骼动画，差不多3D空间变换你也就掌握了。<br>其他所有的层级变换，基本上都不会脱离骨骼动画需要你了解的东西。<br><br>网上骨骼动画的demo多如牛毛，我空间想象能力不行，看过无数资料都不大明白骨骼怎么转，皮肤怎么蒙。况且那些基于DX、基于GL的代码都长的不行，难看的明白。<br><br>前两天vczh搞了个C#的弱智版的2D物理Engine，我今天就搞个C#和GDIPlus的低能版骨骼变换。虽然是2D的，但是原理和实现基本和3D的完全一样。希望这已经简单到不能再简单的代码能帮助大家搞明白骨骼动画是咋回事。<br><br>代码框架上都有注释了，矩阵使用的是Sharp3D的数学库，已经在包中了。不过也就用了矩阵乘法和矩阵-矢量乘法，还有一些矢量加减法。<br><a href="http://www.cppblog.com/Files/lingjingqiu/Mesh2D.rar"><br>源代码在此下载</a>。<br><br><span style="color: red;">2楼的回帖给了一个地址，是关于骨骼运动变换的数学推理和理论解释，还讨论了左右手系的问题。理论上有问题的亲们可以参照</span><a  href="http://www.cnblogs.com/neoragex2002/archive/2007/09/13/891945.html">此篇文章</a>。<br><br>截图：<br>
<div style="text-align: center;"><img alt="" src="http://www.cppblog.com/images/cppblog_com/lingjingqiu/PureSkeleton.png" height="580" width="434"><br>骨骼的初始状态<br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/lingjingqiu/PureSkeleton-Rotated.png" height="580" width="434"><br>变换后的骨骼<br><br><img alt="" src="http://www.cppblog.com/images/cppblog_com/lingjingqiu/Skinning.png" height="580" width="434"><br>加了一圈子顶点，这个虽然是2D的，但也是货真价实的蒙皮哈。<br><br></div><img src ="http://www.cppblog.com/lingjingqiu/aggbug/52463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-06-07 19:35 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/06/07/52463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GPU Gems 3 Chapter 3 List 3.4的解释</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/05/21/50619.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Wed, 21 May 2008 02:58:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/05/21/50619.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/50619.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/05/21/50619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/50619.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/50619.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 10pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Lucida Console; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">numBS;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">uint</span><span style="COLOR: #000000">&nbsp;offset&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bsPitch&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;bsOffsets.Load(i);<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;weight&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bsWeights.Load(i);<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;dp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bsVertices.Load(offset&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">vertexID</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;dn&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bsVertices.Load(offset&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">vertexID</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;dt&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;bsVertices.Load(offset&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">vertexID</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;pos&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;dp&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;weight;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;normal&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;dn&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;weight;<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;tangent&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;dt&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;weight;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"></span></div>
<p><br><br>Blend Shapes 放在一个固定的数组bsVertices中,<br>按照</p>
S0V0, S0V1 ... S0VN, S1V0 ... SMVN<br>的形式存放.<br><br>numBS说明了有多少个BS被混合，也就是slots的大小;<br>bsPitch为SxV0 - SxVN的长度;<br>bsOffsets[i] 代表第i个slot使用了哪个BS.<br>
<img src ="http://www.cppblog.com/lingjingqiu/aggbug/50619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-05-21 10:58 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/05/21/50619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开个新的系列：GPU Gems 3 导读  + Chapter I 运用GPU构造复杂的过程化地形 导读（上）</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/05/20/50564.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Tue, 20 May 2008 12:38:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/05/20/50564.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/50564.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/05/20/50564.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/50564.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/50564.html</trackback:ping><description><![CDATA[最近开始抽空在看GPU Gems 3了。本来想挑几篇全文翻译，但是无奈自己英语水平薄弱，同时最近老板逼得紧，也没有那么多时间，于是便准备以导读的形式，将文章的主干部分翻译出来,帮助英文不好的筒子们。<br>导读也是我自己读书的总结。文章的核心内容一定会提及.图和源码，通常我会标注上对应的图书上的figure和list，各位自行参考。基本维持原文的篇章段落，但是一般不会逐字句的考究。<br>至于能有多少篇，我倒是不能保证。不过我所用的电子版是那个26M的chm，我读的时候会把它翻成PDF并加注，如果有筒子需要我注释后的pdf，可以与我联系：<br><br>mail： wuye9036&nbsp;&nbsp; _AAAAATTTTT_ google _dotdotdotdotdot_com<br><br>--------------------------------------------------------------------------------<br><br>Chapter I 运用GPU构造复杂的过程化地形<br>1.1 Introduction<br>过程化地形的应用已经有不少的历史了，Game Programming Gems 2上就已经有了不少成熟的过程化地形的方法，比方说随机断层、基于噪声的、基于分形理论的、中点分割加扰动的。<br>不过这些算法在现代硬件上都时有缺陷的，特别是针对规模很大的地形，要么只能在CPU上实时生成，要么就得预存储起来，但是不管怎么说都面临着很大的资源开销；其次这些算法都是只能生成有些起伏的平面，没办法表现山洞、岩石凸角一类的3D特征。本文运用DX10的Geometry Shader与Stream Output，弥补了上述两个缺陷。<br><br>1.2 移动立方体与密度函数<br>要解决3D的地形特征，首先要解决3D地形特征的表达问题。文中将空间划分为多个Blocks，每个Block代表了世界坐标系中1*1*1大小的空间。每个Block由一个3D纹理来表达。由于使用了过程化的方法，每个Block可以在运行的时候动态生成，这样只需要保留那些能看得见的blocks，从而解决了存储问题。<br>概念上，一个3D的地形可以由一个密度函数来表达。对于每个空间中的点(x, y, z)，都有唯一对应的密度值。我们假设，对于任意一个空间中的点，如果点在地形内部/岩石内部当且仅当点上的密度值大于0。那么小于0的点，自然就在地形之外，如在空气中，水中等等。而岩石表面上的点密度刚好等于0。<br>那么自然，这些岩石表面上密度值等于0的点，就是我们要绘制的&#8220;表面&#8221;。<br>在将空间划分为Block后，还要将每个block进一步细分为多个voxel（体素）。我们假定体素内密度变化时连续的。那么很显然，如果一个体素的顶点上密度有正有负，那么必然里面会有一个（也有可能是多个）0值面。问题就转化为，如何根据体素各个顶点的密度值，求出这个体素内的0值面。如果再把这个假设限定的严格一点，如果体素内密度变化是线性的，那么这些面可以由0-5个三角形来表示；求得这些三角形的方法，被称为Marching Cube算法。<br>很显然，有多少个三角形，每个三角形的顶点落在哪条边上，是由八个顶点的密度的正负值所决定的，而值的相对大小则决定了三角形的顶点在边上靠近那个顶点。那么也就是说，一个体素内0值面的分布共有2^8中情况。如果顶点密度为负，那么标记为0，顶点密度为正则标记为1，则八个顶点的情况可以由一个Byte来表示。<br><br>图1-3<br><br>如果这个字节的值为0或者为255，那么说明所有的顶点都为正或为负，那么说明体素中并没有地表面。Martin Frank为剩下的254中情况建立了一个查找表。其中基本的情形有14种，其余的均可由这些基本情况的对称或旋转求得。<br><br>图1-4<br><br>当确定了三角形的三个顶点分布于哪些边上后，便可用插值的方法求出所在位置。顶点将位于0值点处。例如，一条边AB上有一个0值点P，如果A的密度0.3，B的密度-0.1，那么PB的长度是PA长度的三倍。<br><br>1.2.2 查找表<br>上文已经提到了如何通过体素角点的密度值，就会知道会生成哪些多边形；这些多边形的顶点落在哪些边上。<br>接下来，我们将用讨论这些理论如何在GPU上实现。<br>首先我们建立一张查找表<br>int case_to_numpolys[256];<br>其中每种情况能产生多少个三角形。<br>第二张查找表，<br>int3 edge_connect_list[256][5];<br>这张表保存了每种情况对应的5个三角形。并且我们将一个体素中的12条边按照0-11编号（图 1-5），则查找返回的返回的int3指出了，每个三角形的三个顶点分别落在哪条边上。<br><br>图 1-5 Case 193 的0值多边形情况<br><br>下面的例子很好的说明了这一点。<br>我们以case 193为例。193总共有3个三角形，那么case_to_numploys[193] = 3，其次，edge_connect_list[193][]返回这样的结果：<br><br>int3 edge_connect_list[193][0]: 11 5 10<br>int3 edge_connect_list[193][1]: 11 7 5<br>int3 edge_connect_list[193][2]: 8 3 0<br>int3 edge_connect_list[193][3]: -1 -1 -1<br>int3 edge_connect_list[193][4]: -1 -1 -1<br><br>Geometry Shader在查找了这两张表的信息之后，并计算出顶点在边上的具体位置，便会返回3个多边形列表所需要的9个顶点。由于创建Marching Cubes查找表需要很多的计算量，因此建议预先计算好并在运行前载入。该表在光盘上可以找到。 <br><br>
<img src ="http://www.cppblog.com/lingjingqiu/aggbug/50564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-05-20 20:38 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/05/20/50564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>脚本编程琐话</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/05/16/50048.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Fri, 16 May 2008 07:51:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/05/16/50048.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/50048.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/05/16/50048.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/50048.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/50048.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>讨论脚本编程与静态语言的异同点，<br>总结一下近期脚本编程的心得，<br>吸取教训，<br>并欢迎大家探讨、指点。&nbsp;&nbsp;<a href='http://www.cppblog.com/lingjingqiu/archive/2008/05/16/50048.html'>阅读全文</a><img src ="http://www.cppblog.com/lingjingqiu/aggbug/50048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-05-16 15:51 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/05/16/50048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个type2id的程序</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/03/08/43931.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Fri, 07 Mar 2008 16:55:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/03/08/43931.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/43931.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/03/08/43931.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/43931.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/43931.html</trackback:ping><description><![CDATA[这个设计主要是拿来保证跨组件的时候能尽可能的保护型别安全.<br><br>我今天晚上早些时候也往SoftArt里面提交了一个type to id的实现,使用宏和特化机制<br>但是这个版本的一个很大的问题就在于用起来不是很方便,每注册一个类需要2行代码,而且都是<br>#define PARAM float<br>#include REGTYPE()<br>这样的非常规的宏用法.<br>但是由于它是分类实现的,所以可以在里面补充一些额外的功能,比如自动的具名常量的生成.<br><br>所以晚上回来的时候又用boost的mpl写了一个原形,基本上是纯模板的.注册类只需要一行,但是宏实现版本中一些半自动化的特点也损失的差不多了.<br>回头还是要考虑用preprocessor结合MPL,看看能不能做到两个特点兼备.<br><br>mingw + gcc 4.2.1下通过<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">smart_ptr.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mpl</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">vector.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mpl</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">find.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mpl</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">at.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mpl</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">size.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mpl</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mpl</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">less.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mpl</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">mpl</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">less_equal.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">type_traits</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">is_same.hpp</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_372_373_Open_Image onclick="this.style.display='none'; Codehighlighter1_372_373_Open_Text.style.display='none'; Codehighlighter1_372_373_Closed_Image.style.display='inline'; Codehighlighter1_372_373_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_372_373_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_372_373_Closed_Text.style.display='none'; Codehighlighter1_372_373_Open_Image.style.display='inline'; Codehighlighter1_372_373_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;empty</span><span id=Codehighlighter1_372_373_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_372_373_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;BEGIN_REGISTER_TYPE()&nbsp;typedef&nbsp;boost::mpl::vector&lt;empty</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;REGISTER_TYPE(type)&nbsp;,type</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;END_REGISTER_TYPE()&nbsp;&gt;&nbsp;typelst;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;shader_constant<br><img id=Codehighlighter1_540_1476_Open_Image onclick="this.style.display='none'; Codehighlighter1_540_1476_Open_Text.style.display='none'; Codehighlighter1_540_1476_Closed_Image.style.display='inline'; Codehighlighter1_540_1476_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_540_1476_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_540_1476_Closed_Text.style.display='none'; Codehighlighter1_540_1476_Open_Image.style.display='inline'; Codehighlighter1_540_1476_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_540_1476_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_540_1476_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;BEGIN_REGISTER_TYPE()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REGISTER_TYPE(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REGISTER_TYPE(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REGISTER_TYPE(</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;END_REGISTER_TYPE();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;size_of_typelst&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;boost::mpl::size</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typelst</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::value;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;boost::mpl::int_</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">size_of_typelst</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;size_of_typelst_t;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_821_1053_Open_Image onclick="this.style.display='none'; Codehighlighter1_821_1053_Open_Text.style.display='none'; Codehighlighter1_821_1053_Closed_Image.style.display='inline'; Codehighlighter1_821_1053_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_821_1053_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_821_1053_Closed_Text.style.display='none'; Codehighlighter1_821_1053_Open_Image.style.display='inline'; Codehighlighter1_821_1053_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;type2id</span><span id=Codehighlighter1_821_1053_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_821_1053_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;typename&nbsp;boost::mpl::find</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typelst,&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::type&nbsp;iter;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;id&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boost::mpl::if_</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boost::is_same</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">boost::mpl::end</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typelst</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::type,&nbsp;iter</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boost::mpl::int_</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typename&nbsp;iter::pos<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::type::value;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;id</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1090_1473_Open_Image onclick="this.style.display='none'; Codehighlighter1_1090_1473_Open_Text.style.display='none'; Codehighlighter1_1090_1473_Closed_Image.style.display='inline'; Codehighlighter1_1090_1473_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1090_1473_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1090_1473_Closed_Text.style.display='none'; Codehighlighter1_1090_1473_Open_Image.style.display='inline'; Codehighlighter1_1090_1473_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;id2type</span><span id=Codehighlighter1_1090_1473_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1090_1473_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;boost::mpl::int_</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">id</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;int_id;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;boost::mpl::int_</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;int_0;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">type&nbsp;=&nbsp;(0&nbsp;&lt;&nbsp;id&nbsp;&amp;&amp;&nbsp;id&nbsp;&lt;=&nbsp;size)&nbsp;?&nbsp;typelst[id]&nbsp;:&nbsp;empty;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;typename&nbsp;boost::mpl::if_</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boost::mpl::and_</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boost::mpl::less</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">int_0,&nbsp;int_id&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boost::mpl::less_equal</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">int_id,&nbsp;boost::mpl::size</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typelst</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::type&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typename&nbsp;boost::mpl::at</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typelst,&nbsp;int_id</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::type,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;empty<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::type&nbsp;type;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;shader_constant;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">Assignments)(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p1,&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p2);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;AssignImpl(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p1,&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p2)<br><img id=Codehighlighter1_1617_1674_Open_Image onclick="this.style.display='none'; Codehighlighter1_1617_1674_Open_Text.style.display='none'; Codehighlighter1_1617_1674_Closed_Image.style.display='inline'; Codehighlighter1_1617_1674_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1617_1674_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1617_1674_Closed_Text.style.display='none'; Codehighlighter1_1617_1674_Open_Image.style.display='inline'; Codehighlighter1_1617_1674_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1617_1674_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1617_1674_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;typeid(T).name()&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)p1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)p2;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template&nbsp;</span><span style="COLOR: #000000">&lt;&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;AssignImpl</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">empty</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p1,&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;p2)<br><img id=Codehighlighter1_1732_1766_Open_Image onclick="this.style.display='none'; Codehighlighter1_1732_1766_Open_Text.style.display='none'; Codehighlighter1_1732_1766_Closed_Image.style.display='inline'; Codehighlighter1_1732_1766_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1732_1766_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1732_1766_Closed_Text.style.display='none'; Codehighlighter1_1732_1766_Open_Image.style.display='inline'; Codehighlighter1_1732_1766_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1732_1766_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1732_1766_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">error&nbsp;type!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;Assignments&nbsp;assigns[size_of_typelst</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;assigns_initializer<br><img id=Codehighlighter1_1855_1970_Open_Image onclick="this.style.display='none'; Codehighlighter1_1855_1970_Open_Text.style.display='none'; Codehighlighter1_1855_1970_Closed_Image.style.display='inline'; Codehighlighter1_1855_1970_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1855_1970_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1855_1970_Closed_Text.style.display='none'; Codehighlighter1_1855_1970_Open_Image.style.display='inline'; Codehighlighter1_1855_1970_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1855_1970_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1855_1970_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assigns_initializer</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;m;<br><img id=Codehighlighter1_1908_1968_Open_Image onclick="this.style.display='none'; Codehighlighter1_1908_1968_Open_Text.style.display='none'; Codehighlighter1_1908_1968_Closed_Image.style.display='inline'; Codehighlighter1_1908_1968_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1908_1968_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1908_1968_Closed_Text.style.display='none'; Codehighlighter1_1908_1968_Open_Image.style.display='inline'; Codehighlighter1_1908_1968_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assigns_initializer()</span><span id=Codehighlighter1_1908_1968_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1908_1968_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assigns[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">AssignImpl</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;id2type</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::type&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template&nbsp;</span><span style="COLOR: #000000">&lt;&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;assigns_initializer</span><span style="COLOR: #000000">&lt;-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_2017_2047_Open_Image onclick="this.style.display='none'; Codehighlighter1_2017_2047_Open_Text.style.display='none'; Codehighlighter1_2017_2047_Closed_Image.style.display='inline'; Codehighlighter1_2017_2047_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_2017_2047_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2017_2047_Closed_Text.style.display='none'; Codehighlighter1_2017_2047_Open_Image.style.display='inline'; Codehighlighter1_2017_2047_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_2017_2047_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2017_2047_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_2041_2045_Open_Image onclick="this.style.display='none'; Codehighlighter1_2041_2045_Open_Text.style.display='none'; Codehighlighter1_2041_2045_Closed_Image.style.display='inline'; Codehighlighter1_2041_2045_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2041_2045_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2041_2045_Closed_Text.style.display='none'; Codehighlighter1_2041_2045_Open_Image.style.display='inline'; Codehighlighter1_2041_2045_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assigns_initializer()</span><span id=Codehighlighter1_2041_2045_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2041_2045_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;assigns_initializer</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">size_of_typelst</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;ai;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>typedef&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;T;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_2129_2245_Open_Image onclick="this.style.display='none'; Codehighlighter1_2129_2245_Open_Text.style.display='none'; Codehighlighter1_2129_2245_Closed_Image.style.display='inline'; Codehighlighter1_2129_2245_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_2129_2245_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2129_2245_Closed_Text.style.display='none'; Codehighlighter1_2129_2245_Open_Image.style.display='inline'; Codehighlighter1_2129_2245_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_2129_2245_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2129_2245_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;i1(T(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;i2(T(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assigns[type2id</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::id](</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">i1,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">i2);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;i1;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cppblog.com/lingjingqiu/aggbug/43931.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-03-08 00:55 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/03/08/43931.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件渲染器的项目已经在SF.NET上了</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/02/20/42993.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Wed, 20 Feb 2008 10:44:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/02/20/42993.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/42993.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/02/20/42993.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/42993.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/42993.html</trackback:ping><description><![CDATA[<span style="color: red;">2月22日更新：<br>修改了项目设置（大换血。。。）。昨天下过的最好重新check out。<br><br></span>2月21日更新：<br><br>已经将SoftArt整体放置到SF的SVN上了。<br><br style="color: red;">SVN地址： <a>https://softart.svn.sourceforge/svnroot/softart/prealpha</a><br>svn co https://softart.svn.sourceforge/svnroot/softart/prealpha softart<br><br style="color: red;">由于目前的渲染器离成品还很遥远，所以就没有以Release的形式放出。Version 6 中，CartoonDemo大家可以自行从solution里面移除；EFLIB需要项目地址上下载Release，然后在VC环境中另行设置，给大家带来的不便深表歉意。<br><br>2005 SP1 下通过（有点bug）<span style="color: red;"><br></span><span style="font-size: 18pt;"><br><span style="color: #0010ff;">感谢亨德列克和叛逆者两位前辈的无私指点（不管哪一方面都是，从技术到态度到Fix Defects到New Ideas），非常感谢～～～拜～～～</span></span><br><br>该软件渲染器名字就叫SoftArt，本来准备叫做ColorfulSnail（哈，因为Debug的时候它的运行速度是在是太慢了），但是无奈Snail已经被人注册过了，所以就还是叫这个名字了。<br>每个开发阶段我都会有一个项目代号，目前的这个还是prealpha阶段，所以就叫prealpha好了。<br><br>今天放上去的是支持库Essential Functions Library，大家可以去我的项目地址下载。<br><br><a href="https://sourceforge.net/projects/softart/">https://sourceforge.net/projects/softart/
</a><br><br>也叫Efl Functions Library，提供了一些基本的数学工具（比方说基本的向量和矩阵的运算）。项目的主体代码我需要将接口整理完毕以后再行发布。目前仅https://softart.svn.sourceforge.net/svnroot/softart/prealpha
支持VS2005编译器，很快会考虑2008和GCC 4.2 or later。<br><br>希望大家有什么意见和建议尽管提出，我一定会尽可能将大家的想法加入到我的TODO LIST中。<br><br>   <img src ="http://www.cppblog.com/lingjingqiu/aggbug/42993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-02-20 18:44 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/02/20/42993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式小结（三）</title><link>http://www.cppblog.com/lingjingqiu/archive/2008/02/17/42839.html</link><dc:creator>空明流转</dc:creator><author>空明流转</author><pubDate>Sun, 17 Feb 2008 07:11:00 GMT</pubDate><guid>http://www.cppblog.com/lingjingqiu/archive/2008/02/17/42839.html</guid><wfw:comment>http://www.cppblog.com/lingjingqiu/comments/42839.html</wfw:comment><comments>http://www.cppblog.com/lingjingqiu/archive/2008/02/17/42839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lingjingqiu/comments/commentRss/42839.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lingjingqiu/services/trackbacks/42839.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 总结了我在以往项目中使用设计模式的经验；<br>我阅读《设计模式》的心得；<br>讨论一些在阅读时产生，实践中解决的困惑，为设计模式新手提供一条可以参考的学习路线；<br>并希望与老手们一同探讨、交换：<br>设计模式在实际中使用中的经验与教训；关于拓展现有设计模式、联合使用多个设计模式的案例和思路。&nbsp;&nbsp;<a href='http://www.cppblog.com/lingjingqiu/archive/2008/02/17/42839.html'>阅读全文</a><img src ="http://www.cppblog.com/lingjingqiu/aggbug/42839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lingjingqiu/" target="_blank">空明流转</a> 2008-02-17 15:11 <a href="http://www.cppblog.com/lingjingqiu/archive/2008/02/17/42839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>