锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久综合久久综合久久综合,亚洲图片欧美午夜,国内伊人久久久久久网站视频http://www.shnenglu.com/ngaut/category/1618.htmlasm/c/c++/......zh-cnSat, 27 Dec 2008 09:17:14 GMTSat, 27 Dec 2008 09:17:14 GMT60鎴戜篃鍙戜竴涓秴綰х畝鍗曠殑鐜╁叿綰х紪璇戝櫒錛屼粎姝よ鏄庝竴涓嬬紪璇戠殑鍑犱釜榪囩▼銆愬紑婧愩?/title><link>http://www.shnenglu.com/ngaut/archive/2008/08/10/58451.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 10 Aug 2008 08:56:00 GMT</pubDate><guid>http://www.shnenglu.com/ngaut/archive/2008/08/10/58451.html</guid><wfw:comment>http://www.shnenglu.com/ngaut/comments/58451.html</wfw:comment><comments>http://www.shnenglu.com/ngaut/archive/2008/08/10/58451.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.shnenglu.com/ngaut/comments/commentRss/58451.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ngaut/services/trackbacks/58451.html</trackback:ping><description><![CDATA[     鎽樿:   <a href='http://www.shnenglu.com/ngaut/archive/2008/08/10/58451.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/ngaut/aggbug/58451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ngaut/" target="_blank">ngaut</a> 2008-08-10 16:56 <a href="http://www.shnenglu.com/ngaut/archive/2008/08/10/58451.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浠嬬粛涓嬈懼浗浜у紑婧怌緙栬瘧鍣?/title><link>http://www.shnenglu.com/ngaut/archive/2008/08/08/58346.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 08 Aug 2008 09:23:00 GMT</pubDate><guid>http://www.shnenglu.com/ngaut/archive/2008/08/08/58346.html</guid><wfw:comment>http://www.shnenglu.com/ngaut/comments/58346.html</wfw:comment><comments>http://www.shnenglu.com/ngaut/archive/2008/08/08/58346.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/ngaut/comments/commentRss/58346.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ngaut/services/trackbacks/58346.html</trackback:ping><description><![CDATA[     鎽樿:   <a href='http://www.shnenglu.com/ngaut/archive/2008/08/08/58346.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/ngaut/aggbug/58346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ngaut/" target="_blank">ngaut</a> 2008-08-08 17:23 <a href="http://www.shnenglu.com/ngaut/archive/2008/08/08/58346.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鏈榪戝啓浜嗕釜灝忓伐鍏鳳紝鑷姩寰浠g爜閲岄潰鍔犲叆鍨冨溇浠g爜http://www.shnenglu.com/ngaut/archive/2008/07/29/57385.htmlngautngautMon, 28 Jul 2008 17:32:00 GMThttp://www.shnenglu.com/ngaut/archive/2008/07/29/57385.htmlhttp://www.shnenglu.com/ngaut/comments/57385.htmlhttp://www.shnenglu.com/ngaut/archive/2008/07/29/57385.html#Feedback9http://www.shnenglu.com/ngaut/comments/commentRss/57385.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/57385.html闃呰鍏ㄦ枃

ngaut 2008-07-29 01:32 鍙戣〃璇勮
]]>
antlr絎旇http://www.shnenglu.com/ngaut/archive/2008/06/15/53341.htmlngautngautSun, 15 Jun 2008 07:32:00 GMThttp://www.shnenglu.com/ngaut/archive/2008/06/15/53341.htmlhttp://www.shnenglu.com/ngaut/comments/53341.htmlhttp://www.shnenglu.com/ngaut/archive/2008/06/15/53341.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/53341.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/53341.html

ngaut 2008-06-15 15:32 鍙戣〃璇勮
]]>
antlr璧勬枡http://www.shnenglu.com/ngaut/archive/2008/05/30/51619.htmlngautngautFri, 30 May 2008 10:28:00 GMThttp://www.shnenglu.com/ngaut/archive/2008/05/30/51619.htmlhttp://www.shnenglu.com/ngaut/comments/51619.htmlhttp://www.shnenglu.com/ngaut/archive/2008/05/30/51619.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/51619.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/51619.htmlhttp://www.antlr.org/wiki/display/ANTLR3/Interfacing+AST+with+Java
http://www.cnblogs.com/RicCC/archive/2008/03/17/antlr-notepad.html
http://llf.javaeye.com/blog/157507
http://llf.javaeye.com/blog/156170
http://www.bearcave.com/software/antlr/antlr_examples.html


ngaut 2008-05-30 18:28 鍙戣〃璇勮
]]>
EBNF Grammar for Mini-Javahttp://www.shnenglu.com/ngaut/archive/2008/04/28/48376.htmlngautngautMon, 28 Apr 2008 12:25:00 GMThttp://www.shnenglu.com/ngaut/archive/2008/04/28/48376.htmlhttp://www.shnenglu.com/ngaut/comments/48376.htmlhttp://www.shnenglu.com/ngaut/archive/2008/04/28/48376.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/48376.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/48376.htmlEBNF Grammar for Mini-Java

Goal = MainClass, { ClassDeclaration }, EOF;
MainClass = "class", Identifier, "{", "public", "static", "void", "main", "(", "String", "[", "]", Identifier, ")", "{", Statement, "}", "}";
ClassDeclaration = "class", Identifier, [ "extends", Identifier ], "{", { VarDeclaration }, { MethodDeclaration } "}";
VarDeclaration = Type, Identifier, ";";
MethodDeclaration = "public", Type, Identifier, "(", [ Type, Identifier, { ",", Type, Identifier }, ], ")", "{", { VarDeclaration }, { Statement }, "return", Expression, ";", "}";
Type = "int", "[", "]"
| "boolean"
| "int"
| Identifier
;
Statement = "{", { Statement }, "}"
| "if", "(", Expression, ")", Statement, "else", Statement
| "while", "(", Expression, ")", Statement
| "System.out.println", "(" , Expression, ")", ";"
| Identifier, "=", Expression, ";"
| Identifier, "[", Expression, "]", "=", Expression, ";"
;
Expression = Expression , ( "&&" | "<" | "+" | "-" | "*" ) , Expression
| Expression, "[", Expression, "]"
| Expression, ".", "length"
| Expression, ".", Identifier, "(", [ Expression { ",", Expression } ], ")"
| IntegerLiteral
| "true"
| "false"
| Identifier
| "this"
| "new", "int", "[", Expression, "]"
| "new", Identifier ,"(" ,")"
| "!", Expression
| "(", Expression, ")"
;
Identifier is one or more letters, digits, and underscores, starting with a letter
IntegerLiteral is one or more decimal digits
EOF is a distinguished token returned by the scanner at end-of-file

Comments

Comments are // to end of line and /* ... */, just as in Java. The /* ... */ comments do not nest in Java. For example,
/*
            One commment
            /*  Nested comment */
            Bad things will happen
            */
            
The second /* will be ignored (it is in a comment), and the first */ will terminate the comment. Now, "bad things will happen" as the remaining text is not a comment.

Appel, 2nd edition, page 484, describes comments in MiniJava as being nestable. This is an interesting exercise for the scanner, but is not required.

EBNF

ISO/IEC 14977: 1996(E)
  • Terminal symbols are quoted
  • [ and ] indicate optional symbols
  • { and } indicate repetition
  • ( and ) group items together; the other brackets do too



ngaut 2008-04-28 20:25 鍙戣〃璇勮
]]>
inger璇硶鍥?/title><link>http://www.shnenglu.com/ngaut/archive/2008/03/23/45201.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sun, 23 Mar 2008 11:31:00 GMT</pubDate><guid>http://www.shnenglu.com/ngaut/archive/2008/03/23/45201.html</guid><wfw:comment>http://www.shnenglu.com/ngaut/comments/45201.html</wfw:comment><comments>http://www.shnenglu.com/ngaut/archive/2008/03/23/45201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ngaut/comments/commentRss/45201.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ngaut/services/trackbacks/45201.html</trackback:ping><description><![CDATA[<table nof="LY" border="0" cellpadding="0" cellspacing="0" width="1036"> <tbody> <tr align="left" valign="top"> </tr> <tr align="left" valign="top"> <td height="102"><br></td> <td width="550"><img src="http://inger.sourceforge.net/assets/images/autogen/Inger_Syntax_Diagrams_NBanner.gif" id="Banner1" alt="Inger syntax diagrams" nof="B_H" border="0" height="102" width="550"></td> <td colspan="5"><br></td> </tr> <tr align="left" valign="top"> <td height="576"><br></td> <td colspan="6" align="center" valign="middle" width="983"><img src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams1.png" id="Picture1" border="0" height="576" width="983"></td> </tr> <tr align="left" valign="top"> <td colspan="7" height="5"><br></td> </tr> <tr align="left" valign="top"> <td height="704"><br></td> <td colspan="3" align="center" valign="middle" width="853"><img src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams2.png" id="Picture2" border="0" height="704" width="853"></td> <td colspan="3"><br></td> </tr> <tr align="left" valign="top"> <td colspan="7" height="23"><br></td> </tr> <tr align="left" valign="top"> <td height="595"><br></td> <td colspan="5" align="center" valign="middle" width="980"><img src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams3.png" id="Picture3" border="0" height="595" width="980"></td> <td><br></td> </tr> <tr align="left" valign="top"> <td colspan="7" height="30"><br></td> </tr> <tr align="left" valign="top"> <td height="524"><br></td> <td colspan="4" align="center" valign="middle" width="934"><img src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams4.png" id="Picture4" border="0" height="524" width="934"></td> <td colspan="2"><br></td> </tr> <tr align="left" valign="top"> <td colspan="7" height="33"><br></td> </tr> <tr align="left" valign="top"> <td height="447"><br></td> <td colspan="2" align="center" valign="middle" width="644"><img src="http://inger.sourceforge.net/assets/images/simplesyntaxdiagrams5.png" id="Picture5" border="0" height="447" width="644"></td> <td colspan="4"><br></td> </tr> </tbody> </table><img src ="http://www.shnenglu.com/ngaut/aggbug/45201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ngaut/" target="_blank">ngaut</a> 2008-03-23 19:31 <a href="http://www.shnenglu.com/ngaut/archive/2008/03/23/45201.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>inger BNFhttp://www.shnenglu.com/ngaut/archive/2008/03/23/45200.htmlngautngautSun, 23 Mar 2008 11:30:00 GMThttp://www.shnenglu.com/ngaut/archive/2008/03/23/45200.htmlhttp://www.shnenglu.com/ngaut/comments/45200.htmlhttp://www.shnenglu.com/ngaut/archive/2008/03/23/45200.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/45200.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/45200.htmlSubcollections

  SET_TYPES = { "bool", "char", "float", "int", "string" }
  SET_LITERALS = { <boolean_literal>, <char_literal>, <float_literal>, <int_literal>, <string_literal> }
  SET_INSTRUCTIONS = { "label", "break", "continue", "if", "goto", "while", "do", "switch", "return", ";" }
  SET_UNARIES = { "&", "*", "~", "+", "-", "!" }
 

module

    module:               "module" <identifier> ";" globals.
 

globals

    globals:              e.
   globals:             global globals.
   globals:             "extern" global globals.
 

global

    global:               function.
   global:              declaration.
 

function

    function:             functionheader functionrest.
 

functionheader

    functionheader:       modifiers <identifier> ":" paramlist "->" returntype.
 

functionrest

    functionrest:         ";".
   functionrest:        block.
 

modifiers:

    modifiers:            e.
   modifiers:           "start".
 

paramlist

    paramlist:            "void".
   paramlist:           paramblock moreparamblocks.
 

moreparamblocks

    moreparamblocks:      e.
   moreparamblocks:     ";" paramblock moreparamblocks.
 

paramblock

    paramblock:           type param moreparams.
 

moreparams

    moreparams:           e.
   moreparams:          "," param moreparams.
 

param

    param:                reference <identifier> dimensionblock.
 

returntype

    returntype:           type reference dimensionblock.
 

reference

    reference:            e.
   reference:           "*" reference.
 

dimensionblock

    dimensionblock:       e.
   dimensionblock:      "[" "]" dimensionblock.
 

block

    block:                "{" code "}".
 

code

    code:                 e.
   code:                block code
   code:                statement code.
 

statement

    statement:            "label" <identifier> ";"
   statement:           ";"
   statement:           "break" ";"
   statement:           "continue" ";"
   statement:           expression ";"
   statement:           declarationblock ";"
   statement:           "if" "(" expression ")" block elseblock
   statement:           "goto" <identifier> ";"
   statement:           "while" "(" expression ")" "do" block
   statement:           "do" block "while" "(" expression ")" ";"
   statement:           "switch" "(" expression ")" "{" switchcases "default" block "}"
   statement:           "return" returnarg ";".
 

returnarg

    returnarg:            "(" expression ")".
   returnarg:           e.
 

elseblock

    elseblock:            e.
   elseblock:           "else" block.
 

switchcases

    switchcases:          e.
   switchcases:         "case" <int_literal> block swithcases.
 

declarationblock

    declarationblock:     type declaration restdeclarations.
 

restdeclarations

    restlocals:           e.
   restlocals:          "," declaration restdeclarations.
 

declaration

    local:                reference <identifier> indexblock initializer.
 

indexblock

    indexblock:           e.
   indexblock:          "[" <int_literal> "]" indexblock.
 

initializer

    initializer:          e.
   initializer:         "=" expression.
 

expression

    expression:           logicalor restexpression.
 

restexpression

    restexpression:       e.
   restexpression:      "=" logicalor restexpression.
 

logicalor

    logicalor:            logicaland restlogicalor.
 

restlogicalor

    restlogicalor:        e.
   restlogicalor:       "||" logicaland restlogicalor.
 

logicaland

    logicaland:           bitwiseor restlogicaland.
 

restlogicaland

    restlogicaland:       e.
   restlogicaland:      "&&" bitwiseor restlogicaland.
 

bitwiseor

    bitwiseor:            bitwisexor restbitwiseor.
 

restbitwiseor

    restbitwiseor:        e.
   restbitwiseor:       "|" bitwisexor restbitwiseor.
 

bitwisexor

    bitwisexor:           bitwiseand restbitwisexor.
 

restbitwisexor

    restbitwisexor:       e.
   restbitwisexor:      "^" bitwiseand restbitwisexor.
 

bitwiseand

    bitwiseand:           equality restbitwiseand.
 

restbitwiseand

    restbitwiseand:       e.
   restbitwiseand:      "&" equality restbitwiseand.
 

equality

    equality:             relation restequality.
 

restequality

    restequality:         e.
   restequality:        equalityoperator relation restequality.
 

equalityoperator

    equalityoperator:     "==".
   equalityoperator:    "!=".
 

relation

    relation:             shift restrelation.
 

restrelation

    restrelation:         e.
   restrelation:        relationoperator shift restrelation.
 

relationoperator

    relationoperator:     "<".
   relationoperator:    "<=".
   relationoperator:    ">".
   relationoperator:    ">=".
 

shift

    shift:                addition restshift.
 

restshift

    restshift:            e.
   restshift:           shiftoperator addition restshift.
 

shiftoperator

    shiftoperator:        "<<".
   shiftoperator:       ">>".
 

addition

    addition:             multiplication restaddition.
 

restaddition

    restaddition:         e.
   restaddition:        additionoperator multiplication restaddition.
 

additionoperator

    additionoperator:     "+".
   additionoperator:    "-".
 

multiplication

    multiplication:       unary3 restmultiplication.
 

restmultiplication

    restmultiplication:   e.
   restmultiplication:  multiplicationoperator unary3 restmultiplication.
 

multiplicationoperator

    multiplicationoperator: "*".
   multiplicationoperator: "/".
   multiplicationoperator: "%".
 

unary3

    unary3:               unary2
   unary3:              unary3operator unary3.
 

unary3operator:

    unary3operator:       "&".
   unary3operator:      "*".
   unary3operator:      "~".
 

unary2

    unary2:               factor.
   unary2:              unary2operator unary2.
 

unary2operator

    unary2operator:       "+".
   unary2operator:      "-".
   unary2operator:      "!".
 

factor

    factor:               <identifier> application.
   factor:              immediate.
   factor:              "(" expression ")".
 

application

    application:          e.
   application:         "[" expression "]" application.
   application:         "(" expression moreexpressions ")".
 

moreexpressions

    moreexpressions:      e.
   moreexpressions:     "," expression morexpressions.
 

type

    type:                 "bool".
   type:                "char".
   type:                "float".
   type:                "int".
   type:                "string".
 

immediate

    immediate:            <boolean_literal>.
   immediate:           <char_literal>.
   immediate:           <float_literal>.
   immediate:           <int_literal>.
   immediate:           <string_literal>.


ngaut 2008-03-23 19:30 鍙戣〃璇勮
]]>
inger EBNFhttp://www.shnenglu.com/ngaut/archive/2008/03/23/45198.htmlngautngautSun, 23 Mar 2008 11:04:00 GMThttp://www.shnenglu.com/ngaut/archive/2008/03/23/45198.htmlhttp://www.shnenglu.com/ngaut/comments/45198.htmlhttp://www.shnenglu.com/ngaut/archive/2008/03/23/45198.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/45198.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/45198.htmlModules

module

    module:               "module" <identifier> ";" {[extern] global}.
 

global

    global:               function | declaration.
 

Functions

function

    function:             functionheader [ ";" | block ].
 

functionheader

    functionheader:       ["start"] <identifier> ":" paramlist "->" returntype.
 

paramlist

    paramlist:            "void" | paramblock {";" paramblock}.
 

paramblock

    paramblock:           type param {"," param}.
 

param

    param:                {"*"} <identifier> {"[" "]"}.
 

returntype

    returntype:           type {"*"} {"[" "]"}.
 

Blocks and statements

block

    block:                "{" { statement | block } "}".
 

statement

    statement:            "label" <identifier> ";"
   statement:           ";"
   statement:           "break" ";"
   statement:           "continue" ";"
   statement:           expression ";"
   statement:           declarationblock ";"
   statement:           "if" "(" expression ")" block [ "else" block ].
   statement:           "goto" <identifier> ";"
   statement:           "while" "(" expression ")" "do" block
   statement:           "do" block "while" "(" expression ")" ";"
   statement:           "switch" "(" expression ")" "{" { "case" <int_literal> block } "default" block "}"
   statement:           "return" "(" expression ")"

?
";".
 

declarationblock

    declarationblock:     type declaration {"," declaration}.
 

declaration

    local:                {"*"} <identifier> {"[" <int_literal> "]"} [ "=" expression ].
 

Expressions

Assignment

    expression:           logicalor {"=" logicalor expression}.
 

Logical OR

    logicalor:            logicaland {"||" logicaland logicalor}.
 

Logical AND

    logicaland:           bitwiseor {"&&" bitwiseor logicaland}.
 

Bitwise OR

    bitwiseor:            bitwisexor {"|" bitwisexor bitwiseor}.
 

Bitwise XOR

    bitwisexor:           bitwiseand {"^" bitwiseand bitwisexor}.
 

Bitwise AND

    bitwiseand:           equality {"&" equality bitwiseand}.
 

Equality

    equality:             relation {("==" | "!=") relation equality}.
 

Relation

    relation:             shift {("<" | "<=" | ">" | ">=") shift relation}.
 

Bitwise shift

    shift:                addition {("<<" | ">>") addition shift}.
 

Addition/subtraction

    addition:             multiplication {("+" | "-") multiplication addition}
 

Multiplication/division

    multiplication:       unary3 {("*" | "/" | "%") unary3 multiplication}.
 

Unary operations

Reference, indirection and bitwise complement

    unary3:               {("&" | "*" | "~")} unary2.
 

Unary negation, unary plus and logical NOT

    unary2:               {("+" | "-" | "!")} factor.
 

Factor and application

factor

    factor:               <identifier> [application] | immediate | "(" expression ")".
 

application

    application:          "[" expression "]" application | "(" expression {"," expression } ")".
 

Types and immediates

type

    type:                 "bool" | "char" | "float" | "int" | "string".
 

immediate

    immediate:            <boolean_literal> | <char_literal> | <float_literal> | <int_literal> | <string_literal>.


ngaut 2008-03-23 19:04 鍙戣〃璇勮
]]>
inger婧愮爜鍒嗘瀽--棰勫鐞?/title><link>http://www.shnenglu.com/ngaut/archive/2008/01/05/40481.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Sat, 05 Jan 2008 14:01:00 GMT</pubDate><guid>http://www.shnenglu.com/ngaut/archive/2008/01/05/40481.html</guid><wfw:comment>http://www.shnenglu.com/ngaut/comments/40481.html</wfw:comment><comments>http://www.shnenglu.com/ngaut/archive/2008/01/05/40481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ngaut/comments/commentRss/40481.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ngaut/services/trackbacks/40481.html</trackback:ping><description><![CDATA[<p>         preprocessorFilename = (char *) malloc( strlen( argv[optind] ) + 3 );<br>        strcpy( preprocessorFilename, argv[optind] );<br>        strcat( preprocessorFilename, "_p" );</p> <p>        /* Call the preprocessor. It will store its result in<br>         * preprocessorFilename. If the preprocessor could not<br>         * open the input file, skip this file.<br>         * 寤虹珛涓涓柊鏂囦歡錛屾枃浠跺悕涓哄師鏉ョ殑.i鏂囦歡鍔犱笂.p,濡傛灉杈撳叆鐨?br>            鏂囦歡鍚嶆槸while.i,鍒欑敓鎴愮殑緇忚繃棰勫鐞嗙殑鏂囦歡鍚嶄負while.i_p錛?br>            榪欓噷璇寸殑棰勫鐞嗗拰c璇█鏄竴鏍風殑錛屽嵆灝嗙浉搴旂殑澶存枃浠舵嫹璐濊繃鏉ワ紝<br>            濡?import "printint.ih"錛屽垯灝?import "printint.ih"鏇挎崲涓?br>            printint.ih鏂囦歡鐨勫唴瀹?br>         */<br>        result = Preprocess( argv[optind], preprocessorFilename );</p> <img src ="http://www.shnenglu.com/ngaut/aggbug/40481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ngaut/" target="_blank">ngaut</a> 2008-01-05 22:01 <a href="http://www.shnenglu.com/ngaut/archive/2008/01/05/40481.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>inger婧愮爜絎旇 鏉備貢http://www.shnenglu.com/ngaut/archive/2008/01/03/40366.htmlngautngautThu, 03 Jan 2008 15:14:00 GMThttp://www.shnenglu.com/ngaut/archive/2008/01/03/40366.htmlhttp://www.shnenglu.com/ngaut/comments/40366.htmlhttp://www.shnenglu.com/ngaut/archive/2008/01/03/40366.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/40366.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/40366.html

璇嶆硶鍒嗘瀽錛?br>鍏抽敭瀛楀畾涔?

/* This enum contains all the keywords and operators
 * used in the language.
 */
enum
{
    /* Keywords */
    KW_BREAK            = 1000, /* "break" keyword */
    KW_CASE,                    /* "case" keyword */
    KW_CONTINUE,                /* "continue" keyword */
    KW_DEFAULT,                 /* "default" keyword */
    KW_DO,                      /* "do" keyword */
    KW_ELSE,                    /* "else" keyword */
    KW_EXTERN,                  /* "extern" keyword */
    KW_GOTO,                    /* "goto" keyword */
    KW_IF,                      /* "if" keyword */
    KW_LABEL,                   /* "label" keyword */
    KW_MODULE,                  /* "module" keyword */
    KW_RETURN,                  /* "return"keyword */
    KW_START,                   /* "start" keyword */
    KW_SWITCH,                  /* "switch" keyword */
    KW_WHILE,                   /* "while" keyword */

    /* Type identifiers */
    KW_BOOL,                    /* "bool" identifier */
    KW_CHAR,                    /* "char" identifier */
    KW_FLOAT,                   /* "float" identifier */
    KW_INT,                     /* "int" identifier */
    KW_UNTYPED,                 /* "untyped" identifier */
    KW_VOID,                    /* "void" identifier */

    /* Variable lexer tokens */
    LIT_BOOL,                   /* bool constant */
    LIT_CHAR,                   /* character constant */
    LIT_FLOAT,                  /* floating point constant */
    LIT_INT,                    /* integer constant */
    LIT_STRING,                 /* string constant */
    IDENTIFIER,                 /* identifier */

    /* Operators */
    OP_ADD,                     /* "+"  */
    OP_ASSIGN,                  /* "="  */
    OP_BITWISE_AND,             /* "&" */
    OP_BITWISE_COMPLEMENT,      /* "~"  */
    OP_BITWISE_LSHIFT,          /* "<<" */
    OP_BITWISE_OR,              /* "|" */
    OP_BITWISE_RSHIFT,          /* ">>" */
    OP_BITWISE_XOR,             /* "^"  */
    OP_DIVIDE,                  /* "/"  */
    OP_EQUAL,                   /* "==" */
    OP_GREATER,                 /* ">"  */
    OP_GREATEREQUAL,            /* ">=" */
    OP_LESS,                    /* "<"  */
    OP_LESSEQUAL,               /* "<=" */
    OP_LOGICAL_AND,             /* "&&" */
    OP_LOGICAL_OR,              /* "||" */
    OP_MODULUS,                 /* "%"  */
    OP_MULTIPLY,                /* "*"  */
    OP_NOT,                     /* "!"  */
    OP_NOTEQUAL,                /* "!=" */
    OP_SUBTRACT,                /* "-"  */
    OP_TERNARY_IF,              /* "?"  */
  
    /* Delimiters */
    ARROW,                      /* "->" */
    LBRACE,                     /* "{"  */
    RBRACE,                     /* "}"  */
    LBRACKET,                   /* "["  */
    RBRACKET,                   /* "]"  */
    COLON,                      /* ":"  */
    COMMA,                      /* ","  */
    LPAREN,                     /* "("  */
    RPAREN,                     /* ")"  */
    SEMICOLON                   /* ";"  */
}
tokens;

 

 

 

 


澶勭悊inger涓殑鍚勭鏁版嵁綾誨瀷鍜屾爣璇嗙錛屽BOOL, unsigned long, float, char*,鏍囪瘑絎︾瓑
typedef union
{
    unsigned long  uintvalue;
    BOOL    boolvalue;
    char   *stringvalue;
    char    charvalue;
    float   floatvalue;
    char   *identifier;
} Tokenvalue;


鏍戣妭鐐圭粨鏋?娉ㄦ剰錛氭爲鑺傜偣鍜屾娊璞¤娉曟爲鑺傜偣鏄笉鍚岀殑)錛?br>typedef struct TreeNode
{
    void            *data;
    int              screenX;
    struct TreeNode *parent;
    List            *children; //涓緋誨垪瀛╁瓙
} TreeNode;

鎶借薄璇硶鏍戣妭鐐圭粨鏋勶細
typedef struct AstNode
{
    int         id;  //琛ㄧず鑺傜偣鐨勭被鍨嬶紝濡倃hile鑺傜偣錛宮odule鑺傜偣
    Tokenvalue  val;
    Type       *type;
    int         lineno;
} AstNode;

鎶借薄璇硶鏍戠殑AstNode浣滀負TreeNode鐨刣ata鎴愬憳淇濆瓨錛屽弬鑰冨涓嬪嚱鏁幫細
//鍙傛暟id琛ㄧず鑺傜偣鍚嶏紝濡傦細NODE_MODULE,NODE_GLOBAL絳夎nodenames.h
TreeNode *CreateAstNode( int id, int lineno )
{
    TreeNode *treeNode;
    AstNode *astNode;

    astNode = (AstNode *) MallocEx( sizeof( AstNode ) );
    astNode->id = id;
    astNode->lineno = lineno;
    astNode->val.uintvalue = 0;
    astNode->type = NULL;
    treeNode = CreateTreeNode( astNode );

    return( treeNode );
}
鎴栬咃細
TreeNode *CreateAstNodeVal( int id, Tokenvalue val, int lineno )
{
    TreeNode *treeNode;
    AstNode *astNode;

    astNode = (AstNode *) MallocEx( sizeof( AstNode ) );
    astNode->id = id;
    astNode->lineno = lineno;
    astNode->val = val;
    astNode->type = NULL;
    treeNode = CreateTreeNode( astNode );

    return( treeNode );
}


//鎶借薄璇硶鏍戣妭鐐瑰悕
enum NodeNames
{
    NODE_MODULE = 0,
    NODE_START,
    NODE_EXTERN,
    NODE_GLOBAL,
    NODE_FUNCTION,
    NODE_FUNCTIONHEADER,
    NODE_MODIFIERS,
    NODE_PARAMLIST,
    NODE_PARAMBLOCK,
    NODE_PARAM,
    NODE_RETURNTYPE,
    NODE_DIMENSION,
    NODE_DIMENSIONBLOCK,
    NODE_BLOCK,
    NODE_STATEMENT,
    NODE_SWITCH,
    NODE_CASES,
    NODE_CASE,
    NODE_WHILE,
    NODE_GOTO,
    NODE_LABEL,
    NODE_IF,
    NODE_IDENT,
    NODE_RETURN,
    NODE_CONTINUE,
    NODE_BREAK,
    NODE_DECLBLOCK,
    NODE_DECLARATION,
    NODE_INITIALIZER,
    NODE_INDEXBLOCK,
    NODE_REFERENCE,
    NODE_INDEX,
    NODE_EXPRESSION,
    NODE_LOGICAL_OR,
    NODE_LOGICAL_AND,
    NODE_BITWISE_OR,
    NODE_BITWISE_XOR,
    NODE_BITWISE_AND,
    NODE_EQUAL,
    NODE_NOTEQUAL,
    NODE_GREATER,
    NODE_GREATEREQUAL,
    NODE_LESS,
    NODE_LESSEQUAL,
    NODE_BITWISE_LSHIFT,
    NODE_BITWISE_RSHIFT,
    NODE_ASSIGN,
    NODE_BINARY_ADD,
    NODE_BINARY_SUBTRACT,
    NODE_UNARY_ADD,
    NODE_UNARY_SUBTRACT,
    NODE_MULTIPLY,
    NODE_DIVIDE,
    NODE_MODULUS,
    NODE_BITWISE_COMPLEMENT,
    NODE_ADDRESS,
    NODE_DEREFERENCE,
    NODE_NOT,
    NODE_APPLICATION,
    NODE_INDEXER,
    NODE_ARGUMENTS,
    NODE_FACTOR,

    NODE_BOOL,
    NODE_CHAR,
    NODE_FLOAT,
    NODE_INT,
    NODE_UNTYPED,
    NODE_VOID,

    NODE_LIT_BOOL,
    NODE_LIT_CHAR,
    NODE_LIT_FLOAT,
    NODE_LIT_INT,
    NODE_LIT_STRING,
    NODE_LIT_IDENTIFIER,

    NODE_INT_TO_FLOAT,
    NODE_CHAR_TO_INT,
    NODE_CHAR_TO_FLOAT,

    NODE_UNKNOWN = -1
};


杈撳嚭鎶借薄璇硶鏍戯細
/*
 * PRINTING ROUTINES
 */
void PrintAst( TreeNode *source )
{
    PrintTree( source, GetAstNodeData, 4 );
}
PrintTree鐨勫疄鐜板涓嬶紝榪欓噷浼犻掔殑鍙傛暟levels絳変簬4
void PrintTree( TreeNode *source, DataFunction dataFunction, int levels )
{
    int printDepth = 0;
    BOOL loop;
    char *str;
    int i;

    /* TODO: We're going to have to make a new macro.
     * Don't use DEBUG for this.
     */
    DEBUG( "Called\n" );

    /* If tree is empty, abort. */
    if( source == NULL )
    {
        return;
    }

    /* Walk through tree to determine x-offsets for
     * each node.
     */
    LayoutTree( source, LEFT_OFFSET );

/* Print nodes. */
渚濇閫氳繃璋冪敤鍑芥暟鎸囬拡dataFunction鎵鎸囧悜鐨勫嚱鏁?瀹為檯涓婃槸鍑芥暟GetAstNodeData)
鏉ヨ緭鍑烘瘡涓妭鐐圭殑鑺傜偣鍚嶏紝鑺傜偣鐨則oken鐨勫鹼紝綾誨瀷鍚嶏紝浠ュ強琛屽彿錛屽弬鑰冧笅闈㈢殑GetAstNodeData鍑芥暟

    for( i = 0; i < levels; i++ )
    {
        str = dataFunction( source, i );
        PrintChars( source->screenX - strlen( str ) / 2, ' ' );
        printf( "%s\n", str );
    }
    PrintChars( source->screenX, ' ' );
    printf( "%c", VERTBAR );

    printDepth = 0;
    do
    {
        currentX = 0;
        printf("\n");
        PrintNode( source, 0, printDepth, 0, dataFunction, 0 );
        currentX = 0;
        printf("\n");
        PrintNode( source, 0, printDepth, 1, dataFunction, 0 );
        currentX = 0;
        printf("\n");
        for( i = 0; i < levels; i++ )
        {
            PrintNode( source, 0, printDepth, 2, dataFunction, i );
            currentX = 0;
            printf("\n");
        }
        loop = PrintNode( source, 0, printDepth, 3, dataFunction, 0 );
        printDepth++;
    }
    while( loop );
}

娣誨姞涓涓瀛愮殑鎿嶄綔鍙渶瑕佸皢鏂拌妭鐐規彃鍏ュ埌瀛╁瓙閾捐〃灝鵑儴鍗沖彲
void AddTreeChild( TreeNode *parentnode, TreeNode *node )
{
    /* Do not act on an empty node. */
    if( node == NULL ) return;

    /* If the tree is empty, add the first root node. */
    if( parentnode == NULL )
    {
       node->parent = NULL;
    }
    else
    /* Tree is not empty. Add the new node to [parentnode]'s
     * children list. */
    {
       node->parent = parentnode;

       ListAppend( parentnode->children, node );
    }
}

鑰孯emoveAstNode鍒欏垹闄ゆ暣涓瓙鏍?br>/* Remove node [node] from ast. The node contents
 * and its children get deleted.
 *
 * Pre:  [node] is not NULL.
 */
void RemoveAstNode( TreeNode *node );


inger緙栬瘧嫻佺▼錛?br>1. 棰勫鐞嗭紝鍏抽敭鍑芥暟涓篜reprocess
2. 璇硶鍒嗘瀽錛屾瀯寤烘娊璞¤娉曟爲錛屽叧閿嚱鏁癙arse錛孭arse涔熸槸鏋勯犳娊璞¤娉曟爲鐨勫叆鍙e嚱鏁幫紝濡傛灉璇硶鍒嗘瀽娌℃湁鍙戠幇閿欒鍒欒煩鍒扮3姝?br>3. 鏍規嵁鎶借薄璇硶鏍戞潵寤虹珛絎﹀彿琛ㄥ叧閿嚱鏁頒負CreateSymbolTable( ast );
4. 璇箟鍒嗘瀽錛屽叧閿嚱鏁幫細
a) CheckLeftValues( ast );
b) CheckArgCount( ast );
c) CheckSwitchStatements( ast );
d) CheckFunctionReturns( ast );

5.  鏍規嵁鎶借薄璇硶鏍戠敓鎴愪唬鐮侊紝鍏抽敭鍑芥暟GenerateCode( ast );


 

 



ngaut 2008-01-03 23:14 鍙戣〃璇勮
]]>
涓涓畝鍗曠殑閫掑綊涓嬮檷鍒嗘瀽琛ㄨ揪寮忕殑渚嬪瓙http://www.shnenglu.com/ngaut/archive/2007/12/25/39612.htmlngautngautTue, 25 Dec 2007 11:36:00 GMThttp://www.shnenglu.com/ngaut/archive/2007/12/25/39612.htmlhttp://www.shnenglu.com/ngaut/comments/39612.htmlhttp://www.shnenglu.com/ngaut/archive/2007/12/25/39612.html#Feedback1http://www.shnenglu.com/ngaut/comments/commentRss/39612.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/39612.html闃呰鍏ㄦ枃

ngaut 2007-12-25 19:36 鍙戣〃璇勮
]]>
甯哥敤鐨勬鍒欒〃杈懼紡(杞?http://www.shnenglu.com/ngaut/archive/2007/03/13/19707.htmlngautngautTue, 13 Mar 2007 04:54:00 GMThttp://www.shnenglu.com/ngaut/archive/2007/03/13/19707.htmlhttp://www.shnenglu.com/ngaut/comments/19707.htmlhttp://www.shnenglu.com/ngaut/archive/2007/03/13/19707.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/19707.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/19707.html 聽聽聽 聽聽 甯哥敤鐨勬鍒欒〃杈懼紡(杞?

" ^\d+$ " 銆銆 // 闈炶礋鏁存暟錛堟鏁存暟聽+聽0錛壜?/span>
" ^[0-9]*[1-9][0-9]*$ " 銆銆 // 姝f暣鏁奧?/span>
" ^((-\d+)|(0+))$ " 銆銆 // 闈炴鏁存暟錛堣礋鏁存暟聽+聽0錛壜?/span>
" ^-[0-9]*[1-9][0-9]*$ " 銆銆 // 璐熸暣鏁奧?/span>
" ^-?\d+$ " 銆銆銆銆 // 鏁存暟聽
" ^\d+(\.\d+)?$ " 銆銆 // 闈炶礋嫻偣鏁幫紙姝f誕鐐規暟聽+聽0錛壜?/span>
" ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ " 銆銆 // 姝f誕鐐規暟聽
" ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ " 銆銆 // 闈炴嫻偣鏁幫紙璐熸誕鐐規暟聽+聽0錛壜?/span>
" ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ " 銆銆 // 璐熸誕鐐規暟聽
" ^(-?\d+)(\.\d+)?$ " 銆銆 // 嫻偣鏁奧?/span>
" ^[A-Za-z]+$ " 銆銆 // 鐢?6涓嫳鏂囧瓧姣嶇粍鎴愮殑瀛楃涓猜?/span>
" ^[A-Z]+$ " 銆銆 // 鐢?6涓嫳鏂囧瓧姣嶇殑澶у啓緇勬垚鐨勫瓧絎︿覆聽
" ^[a-z]+$ " 銆銆 // 鐢?6涓嫳鏂囧瓧姣嶇殑灝忓啓緇勬垚鐨勫瓧絎︿覆聽
" ^[A-Za-z0-9]+$ " 銆銆 // 鐢辨暟瀛楀拰26涓嫳鏂囧瓧姣嶇粍鎴愮殑瀛楃涓猜?/span>
" ^\w+$ " 銆銆 // 鐢辨暟瀛椼?6涓嫳鏂囧瓧姣嶆垨鑰呬笅鍒掔嚎緇勬垚鐨勫瓧絎︿覆聽
" ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ " 銆銆銆銆 // email鍦板潃聽
" ^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ " 銆銆 // url
/^ (d { 2 } | d { 4 } ) - (( 0 ([ 1 - 9 ] { 1 } )) | ( 1 [ 1 | 2 ])) - (([ 0 - 2 ]([ 1 - 9 ] { 1 } )) | ( 3 [ 0 | 1 ]))$ / 聽聽聽 // 聽聽騫?鏈?鏃?/span>
/^ (( 0 ([ 1 - 9 ] { 1 } )) | ( 1 [ 1 | 2 ])) / (([ 0 - 2 ]([ 1 - 9 ] { 1 } )) | ( 3 [ 0 | 1 ])) / (d { 2 } | d { 4 } )$ / 聽聽聽 // 聽鏈?鏃?騫?/span>
" ^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$ " 聽聽聽 // Emil
" (d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)? " 聽聽聽聽聽 // 鐢佃瘽鍙風爜
" ^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$ " 聽聽聽 // IP鍦板潃

鍖歸厤涓枃瀛楃鐨勬鍒欒〃杈懼紡錛?[\u4e00-\u9fa5]
鍖歸厤鍙屽瓧鑺傚瓧絎?鍖呮嫭姹夊瓧鍦ㄥ唴)錛歔^\x00-\xff]
鍖歸厤絀鴻鐨勬鍒欒〃杈懼紡錛歕n[\s| ]*\r
鍖歸厤HTML鏍囪鐨勬鍒欒〃杈懼紡錛?<(.*)>.*<\/\1>|<(.*) \/>/
鍖歸厤棣栧熬絀烘牸鐨勬鍒欒〃杈懼紡錛?^\s*)|(\s*$)
鍖歸厤Email鍦板潃鐨勬鍒欒〃杈懼紡錛歕w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
鍖歸厤緗戝潃URL鐨勬鍒欒〃杈懼紡錛歗[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
鍖歸厤甯愬彿鏄惁鍚堟硶(瀛楁瘝寮澶達紝鍏佽5-16瀛楄妭錛屽厑璁稿瓧姣嶆暟瀛椾笅鍒掔嚎)錛歗[a-zA-Z][a-zA-Z0-9_]{4,15}$
鍖歸厤鍥藉唴鐢佃瘽鍙風爜錛?\d{3}-|\d{4}-)?(\d{8}|\d{7})?
鍖歸厤鑵捐QQ鍙鳳細^[1-9]*[1-9][0-9]*$

涓嬭〃鏄厓瀛楃鍙婂叾鍦ㄦ鍒欒〃杈懼紡涓婁笅鏂囦腑鐨勮涓虹殑涓涓畬鏁村垪琛細

\ 灝嗕笅涓涓瓧絎︽爣璁頒負涓涓壒孌婂瓧絎︺佹垨涓涓師涔夊瓧絎︺佹垨涓涓悗鍚戝紩鐢ㄣ佹垨涓涓叓榪涘埗杞箟絎︺?br />
^ 鍖歸厤杈撳叆瀛楃涓茬殑寮濮嬩綅緗傚鏋滆緗簡 RegExp 瀵硅薄鐨凪ultiline 灞炴э紝^ 涔熷尮閰?鈥橽n鈥?鎴?鈥橽r鈥?涔嬪悗鐨勪綅緗?

$ 鍖歸厤杈撳叆瀛楃涓茬殑緇撴潫浣嶇疆銆傚鏋滆緗簡 RegExp 瀵硅薄鐨凪ultiline 灞炴э紝$ 涔熷尮閰?鈥橽n鈥?鎴?鈥橽r鈥?涔嬪墠鐨勪綅緗?

* 鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忛浂嬈℃垨澶氭銆?

+ 鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忎竴嬈℃垨澶氭銆? 絳変環浜?{1,}銆?

? 鍖歸厤鍓嶉潰鐨勫瓙琛ㄨ揪寮忛浂嬈℃垨涓嬈°? 絳変環浜?{0,1}銆?

{n} n 鏄竴涓潪璐熸暣鏁幫紝鍖歸厤紜畾鐨刵 嬈°?br />
{n,} n 鏄竴涓潪璐熸暣鏁幫紝鑷沖皯鍖歸厤n 嬈°?

{n,m} m 鍜?n 鍧囦負闈炶礋鏁存暟錛屽叾涓璶 <= m銆傛渶灝戝尮閰?n 嬈′笖鏈澶氬尮閰?m 嬈°傚湪閫楀彿鍜屼袱涓暟涔嬮棿涓嶈兘鏈夌┖鏍箋?br />
? 褰撹瀛楃绱ц窡鍦ㄤ換浣曚竴涓叾浠栭檺鍒剁 (*, +, ?, {n}, {n,}, {n,m}) 鍚庨潰鏃訛紝鍖歸厤妯″紡鏄潪璐┆鐨勩傞潪璐┆妯″紡灝藉彲鑳藉皯鐨勫尮閰嶆墍鎼滅儲鐨勫瓧絎︿覆錛岃岄粯璁ょ殑璐┆妯″紡鍒欏敖鍙兘澶氱殑鍖歸厤鎵鎼滅儲鐨勫瓧絎︿覆銆?

. 鍖歸厤闄?"\n" 涔嬪鐨勪換浣曞崟涓瓧絎︺傝鍖歸厤鍖呮嫭 鈥橽n鈥?鍦ㄥ唴鐨勪換浣曞瓧絎︼紝璇蜂嬌鐢ㄨ薄 鈥橻.\n]鈥?鐨勬ā寮忋?
(pattern) 鍖歸厤pattern 騫惰幏鍙栬繖涓鍖歸厤銆?

(?:pattern) 鍖歸厤pattern 浣嗕笉鑾峰彇鍖歸厤緇撴灉錛屼篃灝辨槸璇磋繖鏄竴涓潪鑾峰彇鍖歸厤錛屼笉榪涜瀛樺偍渚涗互鍚庝嬌鐢ㄣ?

(?=pattern) 姝e悜棰勬煡錛屽湪浠諱綍鍖歸厤 pattern 鐨勫瓧絎︿覆寮濮嬪鍖歸厤鏌ユ壘瀛楃涓層傝繖鏄竴涓潪鑾峰彇鍖歸厤錛屼篃灝辨槸璇達紝璇ュ尮閰嶄笉闇瑕佽幏鍙栦緵浠ュ悗浣跨敤銆?

(?!pattern) 璐熷悜棰勬煡錛屼笌(?=pattern)浣滅敤鐩稿弽

x|y 鍖歸厤 x 鎴?y銆?

[xyz] 瀛楃闆嗗悎銆?

[^xyz] 璐熷煎瓧絎﹂泦鍚堛?

[a-z] 瀛楃鑼冨洿錛屽尮閰嶆寚瀹氳寖鍥村唴鐨勪換鎰忓瓧絎︺?

[^a-z] 璐熷煎瓧絎﹁寖鍥達紝鍖歸厤浠諱綍涓嶅湪鎸囧畾鑼冨洿鍐呯殑浠繪剰瀛楃銆?

\b 鍖歸厤涓涓崟璇嶈竟鐣岋紝涔熷氨鏄寚鍗曡瘝鍜岀┖鏍奸棿鐨勪綅緗?br />
\B 鍖歸厤闈炲崟璇嶈竟鐣屻?

\cx 鍖歸厤鐢眡鎸囨槑鐨勬帶鍒跺瓧絎︺?

\d 鍖歸厤涓涓暟瀛楀瓧絎︺傜瓑浠蜂簬 [0-9]銆?

\D 鍖歸厤涓涓潪鏁板瓧瀛楃銆傜瓑浠蜂簬 [^0-9]銆?

\f 鍖歸厤涓涓崲欏電銆傜瓑浠蜂簬 \x0c 鍜?\cL銆?

\n 鍖歸厤涓涓崲琛岀銆傜瓑浠蜂簬 \x0a 鍜?\cJ銆?

\r 鍖歸厤涓涓洖杞︾銆傜瓑浠蜂簬 \x0d 鍜?\cM銆?

\s 鍖歸厤浠諱綍絀虹櫧瀛楃錛屽寘鎷┖鏍箋佸埗琛ㄧ銆佹崲欏電絳夌瓑銆傜瓑浠蜂簬[ \f\n\r\t\v]銆?

\S 鍖歸厤浠諱綍闈炵┖鐧藉瓧絎︺傜瓑浠蜂簬 [^ \f\n\r\t\v]銆?

\t 鍖歸厤涓涓埗琛ㄧ銆傜瓑浠蜂簬 \x09 鍜?\cI銆?

\v 鍖歸厤涓涓瀭鐩村埗琛ㄧ銆傜瓑浠蜂簬 \x0b 鍜?\cK銆?

\w 鍖歸厤鍖呮嫭涓嬪垝綰跨殑浠諱綍鍗曡瘝瀛楃銆傜瓑浠蜂簬鈥橻A-Za-z0-9_]鈥欍?

\W 鍖歸厤浠諱綍闈炲崟璇嶅瓧絎︺傜瓑浠蜂簬 鈥橻^A-Za-z0-9_]鈥欍?

\xn 鍖歸厤 n錛屽叾涓?n 涓哄崄鍏繘鍒惰漿涔夊箋傚崄鍏繘鍒惰漿涔夊煎繀欏諱負紜畾鐨勪袱涓暟瀛楅暱銆?br />
\num 鍖歸厤 num錛屽叾涓璶um鏄竴涓鏁存暟銆傚鎵鑾峰彇鐨勫尮閰嶇殑寮曠敤銆?

\n 鏍囪瘑涓涓叓榪涘埗杞箟鍊兼垨涓涓悗鍚戝紩鐢ㄣ傚鏋?\n 涔嬪墠鑷沖皯 n 涓幏鍙栫殑瀛愯〃杈懼紡錛屽垯 n 涓哄悗鍚戝紩鐢ㄣ傚惁鍒欙紝濡傛灉 n 涓哄叓榪涘埗鏁板瓧 (0-7)錛屽垯 n 涓轟竴涓叓榪涘埗杞箟鍊箋?

\nm 鏍囪瘑涓涓叓榪涘埗杞箟鍊兼垨涓涓悗鍚戝紩鐢ㄣ傚鏋?\nm 涔嬪墠鑷沖皯鏈塱s preceded by at least nm 涓幏鍙栧緱瀛愯〃杈懼紡錛屽垯 nm 涓哄悗鍚戝紩鐢ㄣ傚鏋?\nm 涔嬪墠鑷沖皯鏈?n 涓幏鍙栵紝鍒?n 涓轟竴涓悗璺熸枃瀛?m 鐨勫悗鍚戝紩鐢ㄣ傚鏋滃墠闈㈢殑鏉′歡閮戒笉婊¤凍錛岃嫢 n 鍜?m 鍧囦負鍏繘鍒舵暟瀛?(0-7)錛屽垯 \nm 灝嗗尮閰嶅叓榪涘埗杞箟鍊?nm銆?

\nml 濡傛灉 n 涓哄叓榪涘埗鏁板瓧 (0-3)錛屼笖 m 鍜?l 鍧囦負鍏繘鍒舵暟瀛?(0-7)錛屽垯鍖歸厤鍏繘鍒惰漿涔夊?nml銆?

\un 鍖歸厤 n錛屽叾涓?n 鏄竴涓敤鍥涗釜鍗佸叚榪涘埗鏁板瓧琛ㄧず鐨刄nicode瀛楃銆?

鍖歸厤涓枃瀛楃鐨勬鍒欒〃杈懼紡錛?[u4e00-u9fa5]

鍖歸厤鍙屽瓧鑺傚瓧絎?鍖呮嫭姹夊瓧鍦ㄥ唴)錛歔^x00-xff]

搴旂敤錛氳綆楀瓧絎︿覆鐨勯暱搴︼紙涓涓弻瀛楄妭瀛楃闀垮害璁?錛孉SCII瀛楃璁?錛?/p>

String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;}

鍖歸厤絀鴻鐨勬鍒欒〃杈懼紡錛歯[s| ]*r

鍖歸厤HTML鏍囪鐨勬鍒欒〃杈懼紡錛?<(.*)>.*</1>|<(.*) />/

鍖歸厤棣栧熬絀烘牸鐨勬鍒欒〃杈懼紡錛?^s*)|(s*$)

搴旂敤錛歫avascript涓病鏈夊儚vbscript閭f牱鐨則rim鍑芥暟錛屾垜浠氨鍙互鍒╃敤榪欎釜琛ㄨ揪寮忔潵瀹炵幇錛屽涓嬶細

String.prototype.trim = function()
{
return this.replace(/(^s*)|(s*$)/g, "");
}

鍒╃敤姝e垯琛ㄨ揪寮忓垎瑙e拰杞崲IP鍦板潃錛?/p>

涓嬮潰鏄埄鐢ㄦ鍒欒〃杈懼紡鍖歸厤IP鍦板潃錛屽茍灝咺P鍦板潃杞崲鎴愬搴旀暟鍊肩殑Javascript紼嬪簭錛?/p>

function IP2V(ip)
{
re=/(d+).(d+).(d+).(d+)/g //鍖歸厤IP鍦板潃鐨勬鍒欒〃杈懼紡
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}

涓嶈繃涓婇潰鐨勭▼搴忓鏋滀笉鐢ㄦ鍒欒〃杈懼紡錛岃岀洿鎺ョ敤split鍑芥暟鏉ュ垎瑙e彲鑳芥洿綆鍗曪紝紼嬪簭濡備笅錛?/p>

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP鍊兼槸錛?+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

鍖歸厤Email鍦板潃鐨勬鍒欒〃杈懼紡錛歸+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*

鍖歸厤緗戝潃URL鐨勬鍒欒〃杈懼紡錛歨ttp://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

鍒╃敤姝e垯琛ㄨ揪寮忓幓闄ゅ瓧涓蹭腑閲嶅鐨勫瓧絎︾殑綆楁硶紼嬪簭錛?/p>

var s="abacabefgeeii"
var s1=s.replace(/(.).*1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //緇撴灉涓猴細abcefgi

鎴戝師鏉ュ湪CSDN涓婂彂璐村姹備竴涓〃杈懼紡鏉ュ疄鐜板幓闄ら噸澶嶅瓧絎︾殑鏂規硶錛屾渶緇堟病鏈夋壘鍒幫紝榪欐槸鎴戣兘鎯沖埌鐨勬渶綆鍗曠殑瀹炵幇鏂規硶銆傛濊礬鏄嬌鐢ㄥ悗鍚戝紩鐢ㄥ彇鍑哄寘鎷噸澶嶇殑瀛楃錛屽啀浠ラ噸澶嶇殑瀛楃寤虹珛絎簩涓〃杈懼紡錛屽彇鍒頒笉閲嶅鐨勫瓧絎︼紝涓よ呬覆榪炪傝繖涓柟娉曞浜庡瓧絎﹂『搴忔湁瑕佹眰鐨勫瓧絎︿覆鍙兘涓嶉傜敤銆?/p>

寰楃敤姝e垯琛ㄨ揪寮忎粠URL鍦板潃涓彁鍙栨枃浠跺悕鐨刯avascript紼嬪簭錛屽涓嬬粨鏋滀負page1

s="http://www.9499.net/page1.htm"
s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2")
alert(s)

鍒╃敤姝e垯琛ㄨ揪寮忛檺鍒剁綉欏佃〃鍗曢噷鐨勬枃鏈杈撳叆鍐呭錛?/p>

鐢? 姝e垯琛ㄨ揪寮忛檺鍒跺彧鑳借緭鍏ヤ腑鏂囷細onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"

鐢? 姝e垯琛ㄨ揪寮忛檺鍒跺彧鑳借緭鍏ュ叏瑙掑瓧絎︼細 onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"

鐢? 姝e垯琛ㄨ揪寮忛檺鍒跺彧鑳借緭鍏ユ暟瀛楋細onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"

鐢? 姝e垯琛ㄨ揪寮忛檺鍒跺彧鑳借緭鍏ユ暟瀛楀拰鑻辨枃錛歰nkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"



ngaut 2007-03-13 12:54 鍙戣〃璇勮
]]>
緙栬瘧鍣╥nger婧愮爜鍒嗘瀽(鍥? 錛?璇嶆硶鍒嗘瀽杈呭姪妯″潡http://www.shnenglu.com/ngaut/archive/2007/02/05/18403.htmlngautngautMon, 05 Feb 2007 12:53:00 GMThttp://www.shnenglu.com/ngaut/archive/2007/02/05/18403.htmlhttp://www.shnenglu.com/ngaut/comments/18403.htmlhttp://www.shnenglu.com/ngaut/archive/2007/02/05/18403.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/18403.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/18403.html闃呰鍏ㄦ枃

ngaut 2007-02-05 20:53 鍙戣〃璇勮
]]>
緙栬瘧鍣╥nger婧愮爜鍒嗘瀽(涓? 鎶借薄鍙岄摼琛紞鍏蜂綋瀹炵幇http://www.shnenglu.com/ngaut/archive/2007/02/05/18401.htmlngautngautMon, 05 Feb 2007 12:39:00 GMThttp://www.shnenglu.com/ngaut/archive/2007/02/05/18401.htmlhttp://www.shnenglu.com/ngaut/comments/18401.htmlhttp://www.shnenglu.com/ngaut/archive/2007/02/05/18401.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/18401.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/18401.html闃呰鍏ㄦ枃

ngaut 2007-02-05 20:39 鍙戣〃璇勮
]]>
緙栬瘧鍣╥nger婧愮爜鍒嗘瀽(浜? 鎶借薄鍙岄摼琛紞鎺ュ彛http://www.shnenglu.com/ngaut/archive/2007/02/05/18396.htmlngautngautMon, 05 Feb 2007 10:45:00 GMThttp://www.shnenglu.com/ngaut/archive/2007/02/05/18396.htmlhttp://www.shnenglu.com/ngaut/comments/18396.htmlhttp://www.shnenglu.com/ngaut/archive/2007/02/05/18396.html#Feedback2http://www.shnenglu.com/ngaut/comments/commentRss/18396.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/18396.html闃呰鍏ㄦ枃

ngaut 2007-02-05 18:45 鍙戣〃璇勮
]]>
緙栬瘧鍣╥nger婧愮爜鍒嗘瀽(涓) 閿欒鎶ュ憡妯″潡http://www.shnenglu.com/ngaut/archive/2007/02/04/18326.htmlngautngautSun, 04 Feb 2007 08:20:00 GMThttp://www.shnenglu.com/ngaut/archive/2007/02/04/18326.htmlhttp://www.shnenglu.com/ngaut/comments/18326.htmlhttp://www.shnenglu.com/ngaut/archive/2007/02/04/18326.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/18326.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/18326.html闃呰鍏ㄦ枃

ngaut 2007-02-04 16:20 鍙戣〃璇勮
]]>
浠庝粖澶╁紑濮嬪垎鏋愮紪璇戝櫒inger鐨勬簮浠g爜http://www.shnenglu.com/ngaut/archive/2007/02/04/18323.htmlngautngautSun, 04 Feb 2007 07:36:00 GMThttp://www.shnenglu.com/ngaut/archive/2007/02/04/18323.htmlhttp://www.shnenglu.com/ngaut/comments/18323.htmlhttp://www.shnenglu.com/ngaut/archive/2007/02/04/18323.html#Feedback1http://www.shnenglu.com/ngaut/comments/commentRss/18323.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/18323.html
鍏堢畝鍗曡鍑犲彞, 浠庝唬鐮佷笂鐪嬶紝inger浠g爜娓呮櫚錛屼紭緹庯紝娉ㄩ噴鍏呰凍錛屾槸闅懼緱鐨勯槄璇誨垎鏋愪匠鍝併?br />
鏁翠釜緙栬瘧鍣ㄤ嬌鐢╟璇█緙栧啓錛屼粠闅懼害鍜屾竻鏅板害鏉ョ湅錛屾槸鎴戣榪囩殑鏈婕備寒鐨刢浠g爜(瀹為檯涓婃垜璇昏繃鐨勪唬鐮佸緢灝戯紝姹?錛?br />
璇嶆硶鍒嗘瀽閮ㄥ垎浣跨敤浜唋ex銆傚ソ鍍忎篃涓嶆瘮鎵嬪啓杞繪澗澶氬皯^_^



ngaut 2007-02-04 15:36 鍙戣〃璇勮
]]>
[杞琞璇嶆硶鍒嗘瀽鍣ㄩ噰鍙栫殑鎿嶄綔http://www.shnenglu.com/ngaut/archive/2007/01/17/17705.htmlngautngautTue, 16 Jan 2007 20:53:00 GMThttp://www.shnenglu.com/ngaut/archive/2007/01/17/17705.htmlhttp://www.shnenglu.com/ngaut/comments/17705.htmlhttp://www.shnenglu.com/ngaut/archive/2007/01/17/17705.html#Feedback2http://www.shnenglu.com/ngaut/comments/commentRss/17705.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/17705.html璇嶆硶鍒嗘瀽鍣ㄩ噰鍙栫殑鎿嶄綔

褰撹瘝娉曞垎鏋愬櫒涓庤鏄庢枃浠惰鍒欓儴鍒嗕腑鐨勪竴涓墿灞曟鍒欒〃杈懼紡鍖歸厤鏃訛紝瀹冩墽琛屼笌鎵╁睍姝e垯琛ㄨ揪寮忕浉瀵瑰簲鐨?em>鎿嶄綔銆傛病鏈夎凍澶熺殑瑙勫垯鍖歸厤杈撳叆嫻佷腑鐨勬墍鏈夊瓧絎︿覆錛岃瘝娉曞垎鏋愬櫒鍒欏皢杈撳叆澶嶅埗鍒版爣鍑嗚緭鍑恒傚洜姝わ紝涓嶈鍒涘緩浠呭皢杈撳叆澶嶅埗鍒拌緭鍑虹殑瑙勫垯銆傜己鐪佺殑杈撳嚭鑳藉甯姪鍦ㄨ鍒欎腑鏌ユ壘闂撮殧銆?/p>

褰撲嬌鐢?lex 鍛戒護澶勭悊鐢?yacc 鍛戒護浜х敓鐨勮В鏋愬櫒鐨勮緭鍏ユ椂錛岃鎻愪緵涓庢墍鏈夎緭鍏ュ瓧絎︿覆鍖歸厤鐨勮鍒欍傞偅浜涜鍒欏繀欏葷敓鎴?yacc 鍛戒護鑳藉瑙i噴鐨勮緭鍑恒?/p>

絀烘搷浣?/h3>

瑕佸拷鐣ヤ笌鎵╁睍姝e垯琛ㄨ揪寮忓叧鑱旂殑杈撳叆錛岃浣跨敤 ;錛圕 璇█絀鴻鍙ワ級浣滀負鎿嶄綔銆備笅闈㈢殑紺轟緥蹇界暐浜嗕笁涓棿闅斿瓧絎︼紙絀虹櫧銆佸埗琛ㄧ鍜屾崲琛岋級錛?/p>

[ \t\n] ;

涓庝笅涓涓搷浣滅浉鍚?/h3>

瑕侀伩鍏嶅弽澶嶅啓鐩稿悓鐨勬搷浣滐紝璇蜂嬌鐢?|錛堢閬撶鍙鳳級銆傛瀛楃鎸囩ず姝よ鍒欑殑鎿嶄綔涓庝笅涓鏉¤鍒欑殑鎿嶄綔鐩稿悓銆備緥濡傦紝鍏堝墠蹇界暐絀虹櫧銆佸埗琛ㄧ鍜屾崲琛屽瓧絎︾殑紺轟緥涔熷彲鍐欐垚錛?/p>

" "                     |
"\t"                    |
"\n"                    ;

\n 鍜?\t 涓よ竟鐨勫紩鍙峰茍涓嶉渶瑕併?/p>

鎵撳嵃鍖歸厤瀛楃涓?/h3>

瑕佺‘瀹氬摢涓枃鏈笌璇存槑鏂囦歡鐨勮鍒欓儴鍒嗙殑琛ㄨ揪寮忓尮閰嶏紝鎮ㄥ彲浠ュ寘鎵?C 璇█ printf 瀛愪緥紼嬭皟鐢ㄤ綔涓鴻琛ㄨ揪寮忕殑涓涓搷浣溿傚綋璇嶆硶鍒嗘瀽鍣ㄥ湪杈撳叆嫻佷腑鎵懼埌鍖歸厤錛岀▼搴忓皢鍖歸厤瀛楃涓叉斁鍏ュ閮ㄥ瓧絎︼紙char錛夊拰瀹藉瓧絎︼紙wchar_t錛夋暟緇勪腑錛屽垎鍒О涓?yytext 鍜?yywtext銆備緥濡傦紝鎮ㄨ兘浣跨敤涓嬮潰鐨勮鍒欐墦鍗板尮閰嶅瓧絎︿覆錛?/p>

[a-z]+            printf("%s",yytext);

C 璇█ printf 瀛愪緥紼嬫帴鍙楁牸寮忓弬鏁板拰瑕佹墦鍗扮殑鏁版嵁銆傚湪姝ょず渚嬩腑錛?strong>printf 瀛愪緥紼嬬殑鍙傛暟鍏鋒湁涓嬮潰鐨勫惈涔夛細

%s 鍦ㄦ墦鍗頒箣鍓嶅皢鏁版嵁杞崲涓虹被鍨嬪瓧絎︿覆鐨勭鍙?/td>
%S 鍦ㄦ墦鍗頒箣鍓嶅皢鏁版嵁杞崲涓哄瀛楃涓詫紙wchar_t錛夌殑絎﹀彿
yytext 鍖呭惈瑕佹墦鍗扮殑鏁版嵁鐨勬暟緇勭殑鍚嶇О
yywtext 鍖呭惈瑕佹墦鍗扮殑澶氬瓧鑺傜被鍨嬶紙wchar_t錛夋暟鎹殑鏁扮粍鍚嶇О

lex 鍛戒護瀹氫箟 ECHO錛涗綔涓鴻鎵撳嵃 yytext 鐨勫唴瀹圭殑鐗規畩鎿嶄綔銆備緥濡傦紝涓嬮潰鐨勪袱鏉¤鍒欐槸絳変環鐨勶細

[a-z]+       ECHO;
[a-z]+       printf("%s",yytext);

鎮ㄥ彲浠ュ湪 lex 璇存槑鏂囦歡鐨勫畾涔夐儴鍒嗕嬌鐢?%array 鎴栬?%pointer 濡備笅鏇存敼 yytext 鐨勮鏄庯細

%array 灝?yytext 瀹氫箟涓轟互 null 緇撴潫鐨勫瓧絎︽暟緇勩傝繖鏄己鐪佹搷浣溿?/td>
%pointer 灝?yytext 瀹氫箟涓烘寚鍚戜互 null 緇撴潫鐨勫瓧絎︿覆鐨勬寚閽堛?/td>

鏌ユ壘鍖歸厤瀛楃涓茬殑闀垮害

瑕佹煡鎵捐瘝娉曞垎鏋愬櫒涓庣壒瀹氱殑鎵╁睍姝e垯琛ㄨ揪寮忔墍鍖歸厤鐨勫瓧絎︽暟錛岃浣跨敤 yyleng 鎴栬?yywleng 澶栭儴鍙橀噺銆?/p>
yyleng 璺熻釜鍖歸厤鐨勫瓧鑺傛暟銆?/td>
yywleng 璺熻釜鍖歸厤瀛楃涓蹭腑鐨勫瀛楃鏁般傚瀛楄妭瀛楃鐨勯暱搴﹀ぇ浜?1銆?/td>

瑕佸杈撳叆鐨勫瓧鏁板拰瀛椾腑鐨勫瓧絎︽暟榪涜璁℃暟錛岃浣跨敤涓嬮潰鐨勬搷浣滐細

[a-zA-Z]+       {words++;chars += yyleng;}

姝ゆ搷浣滄昏鍖歸厤鐨勫瓧涓殑瀛楃鏁幫紝騫跺皢璇ユ暟瀛楄祴浜?chars銆?/p>

涓嬮潰鐨勮〃杈懼紡鍦ㄥ尮閰嶅瓧絎︿覆涓煡鎵炬渶鍚庝竴涓瓧絎︼細

yytext[yyleng-1]

鍖歸厤瀛楃涓蹭腑鐨勫瓧絎︿覆

lex 鍛戒護瀵硅緭鍏ユ祦榪涜鍒嗗尯錛屽茍涓嶆悳绱㈡瘡涓〃杈懼紡鐨勬墍鏈夊彲鑳界殑鍖歸厤瀛楃涓層傛瘡涓瓧絎︿粎璁$畻涓嬈°傝瑕嗙洊姝ら夐」騫舵悳绱㈠彲鑳介噸鍙犳垨鑰呬簰鐩稿寘鍚殑欏癸紝璇蜂嬌鐢?REJECT 鎿嶄綔銆備緥濡傦紝瑕佸 she 鍜?he 鐨勬墍鏈夊疄渚嬶紙鍖呮嫭鍖呭惈鍦?she 涓殑 he錛夎鏁幫紝璇蜂嬌鐢ㄤ笅闈㈢殑鎿嶄綔錛?/p>

she              {s++; REJECT;}
he               {h++}
\n          |.           ;

鍦ㄥ she 鐨勫嚭鐜版鏁拌繘琛岃鏁板悗錛?strong>lex 鍛戒護鎷掔粷杈撳叆瀛楃涓詫紝鐒跺悗瀵?he 鐨勫嚭鐜版鏁拌繘琛岃鏁般傚洜涓?he 騫朵笉鍖呮嫭 she錛屾墍浠?REJECT 鎿嶄綔涓嶅繀鍦?he 涓娿?/p>

灝嗙粨鏋滄坊鍔犲埌 yytext 鏁扮粍

鍏稿瀷鎯呭喌涓嬶紝鏉ヨ嚜杈撳叆嫻佺殑涓嬩竴涓瓧絎︿覆瑕嗙洊 yytext 鏁扮粍涓殑褰撳墠欏廣傚鏋滄偍浣跨敤 yymore 瀛愪緥紼嬶紝鏉ヨ嚜杈撳叆嫻佺殑涓嬩竴涓瓧絎︿覆灝嗚娣誨姞鍒?yytext 鏁扮粍鐨勫綋鍓嶉」鐨勫熬閮ㄣ?/p>

渚嬪錛屼笅闈㈢殑璇嶆硶鍒嗘瀽鍣ㄦ悳绱㈠瓧絎︿覆錛?/p>

%s instring
%%
<INITIAL>\"     {  /* start of string */
         BEGIN instring;
         yymore();
        }
<instring>\"    {  /* end of string */
         printf("matched %s\n", yytext);
         BEGIN INITIAL;
        }
<instring>.     {
         yymore();
        }
<instring>\n    {
         printf("Error, new line in string\n");
         BEGIN INITIAL;
        }

灝界閫氳繃鍖歸厤澶氫釜瑙勫垯錛屽瓧絎︿覆鍙兘琚瘑鍒紝浣嗘槸鍙嶅璋冪敤 yymore 瀛愪緥紼嬪彲浠ョ‘淇?yytext 鏁扮粍鍖呭惈鏁翠釜瀛楃涓層?/p>

灝嗗瓧絎﹁繑鍥炲埌杈撳叆嫻?/h3>

瑕佸皢瀛楃榪斿洖緇欒緭鍏ユ祦錛岃浣跨敤涓嬮潰鐨勮皟鐢細

yyless(n)

鍏朵腑 n 鏄綋鍓嶅瓧絎︿覆涓淇濇寔鐨勫瓧絎︽暟銆傚瓧絎︿覆涓秴榪囨鏁扮洰鐨勫瓧絎﹁榪斿洖鍒拌緭鍏ユ祦銆?strong>yyless 瀛愪緥紼嬫彁渚涚殑鍏堣鍑芥暟綾誨瀷涓?/錛堟枩鏉狅級榪愮畻絎︽墍浣跨敤鐨勭浉鍚岋紝浣嗘槸瀹冨厑璁告洿澶氬鍏剁敤娉曠殑鎺у埗銆?/p>

涓嶆涓嬈′嬌鐢?yyless 瀛愪緥紼嬪鐞嗘枃鏈備緥濡傦紝褰撹娉曞垎鏋?C 璇█紼嬪簭鏃訛紝璇稿 x=-a 涔嬬被鐨勮〃杈懼紡寰堥毦鐞嗚В銆傚畠琛ㄧず x絳変簬-a錛岃繕鏄?x -= a 鐨勬棫鐨勮〃榪板艦寮忥紙鎰忓懗鐫灝?x鍑忓幓鍊?/em>a錛夛紵瑕佸皢姝よ〃杈懼紡浣滀負 x絳変簬-a 澶勭悊錛屼絾鏄鎵撳嵃璀﹀憡娑堟伅鍒欒浣跨敤濡備笅鐨勮鍒欙細

=-[a-zA-Z]      {
                printf("Operator (=-) ambiguous\n");
                yyless(yyleng-1);
                ... action for = ...
                }

杈撳叆錛忚緭鍑哄瓙渚嬬▼

lex 紼嬪簭鍏佽紼嬪簭浣跨敤涓嬭堪杈撳叆錛忚緭鍑猴紙I/O錛夊瓙渚嬬▼錛?/p>
input() 榪斿洖涓嬩竴涓緭鍏ュ瓧絎?/td>
output(c) 灝嗗瓧絎?c 鍐欏埌杈撳嚭
unput(c) 灝嗗瓧絎?c 鎺ㄥ洖杈撳叆嫻侊紝紼嶅悗鍐嶉氳繃 input 瀛愪緥紼嬭鍑?/td>
winput() 榪斿洖涓嬩竴涓瀛楄妭杈撳叆瀛楃
woutput(C) 灝嗗瀛楄妭瀛楃 C 鍐欏洖杈撳嚭嫻?/td>
wunput(C) 灝嗗瀛楄妭瀛楃 C 鎺ㄥ洖杈撳叆嫻侊紝浠ラ氳繃 winput 瀛愪緥紼嬭鍑?/td>

lex 紼嬪簭鎻愪緵榪欎簺瀛愪緥紼嬩綔涓哄畯瀹氫箟銆傚瓙渚嬬▼鐨勪唬鐮佸湪 lex.yy.c 鏂囦歡涓傛偍鑳借鐩栧畠浠茍鎻愪緵鍏朵粬鐗堟湰銆?/p>

瀹氫箟 winput銆?strong>wunput 鍜?woutput 瀹忎互浣跨敤 yywinput銆?strong>yywunput 鍜?yywoutput 瀛愪緥紼嬨傝冭檻鍒板吋瀹規э紝yy 瀛愪緥紼嬮殢鍚庝嬌鐢?input銆?strong>unput 鍜?output 瀛愪緥紼嬫潵璇匯佸啓鍜屾浛鎹㈠畬鍏ㄥ瀛楄妭瀛楃涓渶瑕佹暟鐩殑瀛楄妭銆?/p>

榪欎簺瀛愪緥紼嬪畾涔夊閮ㄦ枃浠跺拰鍐呴儴瀛楃涔嬮棿鐨勫叧緋匯傚鏋滄偍鏇存敼瀛愪緥紼嬶紝璇蜂互鐩稿悓鐨勬柟寮忓皢瀹冧滑鍏ㄩ儴鏇存敼銆傝繖浜涘瓙渚嬬▼搴旇閬靛驚榪欎簺瑙勫垯錛?/p>

  • 鎵鏈夌殑瀛愪緥紼嬪繀欏諱嬌鐢ㄧ浉鍚岀殑瀛楃闆嗐?
  • input 瀛愪緥紼嬪繀欏昏繑鍥?0 鍊間互鎸囩ず鏂囦歡鐨勬湯灝俱?
  • 涓嶈鏇存敼 unput 瀛愪緥紼嬪拰 input 瀛愪緥紼嬬殑鍏崇郴錛屽惁鍒欏厛琛屽嚱鏁頒細涓嶈搗浣滅敤銆?/li>

lex.yy.c 鏂囦歡鍏佽璇嶆硶鍒嗘瀽鍣ㄦ渶澶氬浠?200 涓瓧絎︺?/p>

瑕佽鍖呭惈 NULL 鐨勬枃浠訛紝璇峰垱寤轟笉鍚岀増鏈殑 input 瀛愪緥紼嬨傚湪 input 瀛愪緥紼嬬殑姝e父鐗堟湰涓紝錛堜粠絀哄瓧絎︼級榪斿洖鐨勫?0 琛ㄦ槑榪欐槸鏂囦歡鐨勬湯灝撅紝涓斿皢緇堟杈撳叆銆?/p>

瀛楃闆?/h3>

lex 鍛戒護鐢熸垚鐨勮瘝娉曞垎鏋愬櫒閫氳繃 input銆乷utput 鍜?unput 瀛愪緥紼嬪鐞嗗瓧絎?I/O銆傚洜姝わ紝瑕佸湪 yytext 瀛愪緥紼嬩腑榪斿洖鍊鹼紝lex 鍛戒護浣跨敤榪欎簺瀛愪緥紼嬩嬌鐢ㄧ殑瀛楃璇存槑銆備絾鏄紝鍦ㄥ唴閮?lex 鍛戒護浣跨敤灝忔暣鏁頒唬琛ㄦ瘡涓涓瓧絎︺傚綋浣跨敤鏍囧噯搴撴椂錛屾鏁存暟鏄綆楁満鐢ㄦ潵琛ㄧず瀛楃鐨勪綅妯″紡鐨勫箋傛甯告儏鍐典笅錛屽瓧姣?a 鐢ㄤ笌瀛楃甯擱噺 a 鐩稿悓鐨勬牸寮忚〃紺恒傚鏋滄偍浣跨敤涓嶅悓鐨?I/O 瀛愪緥紼嬫洿鏀規瑙i噴錛岃灝嗚漿鎹㈣〃鏀懼埌璇存槑鏂囦歡鐨勫畾涔夐儴鍒嗐傝漿鎹㈣〃鍦ㄥ寘鍚笅榪版潯鐩殑琛屽紑濮嬪拰緇撴潫錛?/p>

%T

杞崲琛ㄥ寘鍚寚紺轟笌姣忎釜瀛楃鍏寵仈鐨勫肩殑鍏朵粬琛屻備緥濡傦細

%T
{integer}       {character string}
{integer}       {character string}
{integer}       {character string}
%T

鏂囦歡鏈熬澶勭悊

褰撹瘝娉曞垎鏋愬櫒鍒拌揪鏂囦歡鏈熬鏃訛紝瀹冭皟鐢?yywrap 搴撳瓙渚嬬▼錛屾璋冪敤榪斿洖鍊?1錛屾寚紺鴻瘝娉曞垎鏋愬櫒搴旇緇х畫鍦ㄨ緭鍏ユ湯灝炬甯哥粨鏉熴?/p>

浣嗘槸錛屽鏋滆瘝娉曞垎鏋愬櫒浠庡涓簮鎺ユ敹鍒拌緭鍏ワ紝璇鋒洿鏀?yywrap 瀛愪緥紼嬨傛柊鐨勫嚱鏁板繀欏昏幏鍙栨柊鐨勮緭鍏ュ茍灝嗗?0 榪斿洖緇欒瘝娉曞垎鏋愬櫒銆傝繑鍥炲?0 鎸囩ず紼嬪簭搴旇緇х畫澶勭悊銆?/p>

鎮ㄤ篃鍙互鍖呭惈浠g爜錛屼互鍦ㄨ瘝娉曞垎鏋愬櫒鍦ㄦ柊鐗堟湰鐨?yywrap 瀛愪緥紼嬩腑緇堟鏃訛紝鎵撳嵃鎽樿鎶ュ憡鍜岃〃銆?strong>yywrap 瀛愪緥紼嬫槸寮哄埗 yylex 瀛愪緥紼嬭瘑鍒緭鍏ユ湯灝劇殑鍞竴閫斿緞銆?/p>

ngaut 2007-01-17 04:53 鍙戣〃璇勮
]]>緙栬瘧鍘熺悊瀛︿範絎旇錛氳瘝娉曞垎鏋?/title><link>http://www.shnenglu.com/ngaut/archive/2006/07/14/9847.html</link><dc:creator>ngaut</dc:creator><author>ngaut</author><pubDate>Fri, 14 Jul 2006 06:54:00 GMT</pubDate><guid>http://www.shnenglu.com/ngaut/archive/2006/07/14/9847.html</guid><wfw:comment>http://www.shnenglu.com/ngaut/comments/9847.html</wfw:comment><comments>http://www.shnenglu.com/ngaut/archive/2006/07/14/9847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/ngaut/comments/commentRss/9847.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/ngaut/services/trackbacks/9847.html</trackback:ping><description><![CDATA[ <p>璇嶆硶鍒嗘瀽涓昏瀹屾垚鐨勫伐浣滄湁錛?br />1.榪囨護婧愮▼搴忎腑鐨勭┖鐧藉瓧絎﹀拰娉ㄩ噴銆?br />2.璇嗗埆鍚勭甯擱噺錛屽茍涓旀妸瀛楃褰㈠紡鐨勮〃紺鴻漿鍖栦負緙栬瘧鍣ㄧ殑鍐呴儴鏍囪瘑(濡傦細int a = 6,鍦ㄧ紪璇戝櫒鐪嬫潵錛岃繖浜涢兘鏄互瀛楃褰㈠紡琛ㄧず鐨?<br />3.璇嗗埆鏍囪瘑絎?ID)鍜屽叧閿瓧(keyword)<br />4.璇嗗埆婧愮▼搴忎腑鐨勫悇縐嶇鍙?濡傦細"+", "-", "(", "]"絳?</p> <p> <br />java(gjc)璇嶆硶鍒嗘瀽鍣ㄤ紭鐐癸細<br />聽 1.鎵鏈夌殑婧愭枃浠朵竴嬈¤鍏ュ埌鍐呭瓨緙撳啿鍖篵uf[]涓紝瀵歸殢鍚庣殑鎿嶄綔鏈変竴瀹氱殑綆鍖栦綔鐢紝<br />聽聽聽 騫朵嬌寰楄瘝娉曞垎鏋愰熷害鏈変竴瀹氱殑鎻愰珮銆?br />聽 2.璇嶆硶鍒嗘瀽鐨勫嚭閿欑偣鎶ュ憡綺劇‘鍒板叿浣撶殑琛屽拰鍒楋細line, col銆傝寰楁病鏈夊繀瑕佺簿紜埌鍒椼?br />聽 3.閫氳繃scanChar()鏉ラ璇諱竴涓瓧絎︼紝鐒跺悗鏍規嵁棰勮鐨勫瓧絎︽潵鎺ㄦ祴璇oken鍙兘鐨勭被鍨?br />聽聽聽 鐒跺悗璋冪敤鐩稿簲鐨勫嚱鏁版潵澶勭悊銆傛娊璞$▼搴︽洿楂橈紝鍊煎緱瀛︿範銆?br />聽聽聽 <br />聽 <br />聽 <br /></p> <img src ="http://www.shnenglu.com/ngaut/aggbug/9847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/ngaut/" target="_blank">ngaut</a> 2006-07-14 14:54 <a href="http://www.shnenglu.com/ngaut/archive/2006/07/14/9847.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>銆愬疄涔犳敹鑾楓戝鏋滈亣鍒拌繖鏍風殑閿欒錛歭ex.yy.c: undefined reference to `yywrap'http://www.shnenglu.com/ngaut/archive/2006/07/05/9450.htmlngautngautWed, 05 Jul 2006 10:52:00 GMThttp://www.shnenglu.com/ngaut/archive/2006/07/05/9450.htmlhttp://www.shnenglu.com/ngaut/comments/9450.htmlhttp://www.shnenglu.com/ngaut/archive/2006/07/05/9450.html#Feedback0http://www.shnenglu.com/ngaut/comments/commentRss/9450.htmlhttp://www.shnenglu.com/ngaut/services/trackbacks/9450.html#define yywrap()聽 1

鏇村ソ鐨勫姙娉曟槸瀹氫箟:
int yywrap()
{聽
聽聽聽return(1);
}

鍏充簬yywrap鏇磋緇嗙殑淇℃伅鍙互鍙傝僽nix鐨刲ex manual
http://www.scit.wlv.ac.uk/cgi-bin/mansec?1+lex

int yywrap(void)
聽聽聽聽聽聽聽聽聽聽 Called by yylex at聽 end-of-file;聽 the聽 default聽 yywrap
聽聽聽聽聽聽聽聽聽聽 always聽 will聽 return聽 1.聽 If聽 the application requires
聽聽聽聽聽聽聽聽聽聽 yylex to continue processing with聽 another聽 source聽 of
聽聽聽聽聽聽聽聽聽聽 input,聽 then聽 the聽 application聽 can include a function
聽聽聽聽聽聽聽聽聽聽 yywrap, which associates another file with the聽 exter-
聽聽聽聽聽聽聽聽聽聽 nal聽 variable聽 FILE聽 *yyin聽 and will return a value of
聽聽聽聽聽聽聽聽聽聽 zero.

鎴杅lex鐨勫弬鑰冩墜鍐?榪欎釜璨屼技鏇村箍娉涗竴鐐?錛?br />http://www.gnu.org/software/flex/manual/html_mono/flex.html

When the scanner receives an end-of-file indication from YY_INPUT, it then checks the `yywrap()' function. If `yywrap()' returns false (zero), then it is assumed that the function has gone ahead and set up yyin to point to another input file, and scanning continues. If it returns true (non-zero), then the scanner terminates, returning 0 to its caller. Note that in either case, the start condition remains unchanged; it does not revert to INITIAL.

If you do not supply your own version of `yywrap()', then you must either use `%option noyywrap' (in which case the scanner behaves as though `yywrap()' returned 1), or you must link with `-lfl' to obtain the default version of the routine, which always returns 1.



ngaut 2006-07-05 18:52 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美激情综合亚洲一二区| 99riav国产精品| 亚洲欧美制服中文字幕| 亚洲视频高清| 国产精品美女久久久| 午夜精品久久久久久久白皮肤| 亚洲午夜久久久久久久久电影院| 欧美视频中文字幕| 性色av一区二区三区在线观看| 亚洲尤物在线视频观看| 国产欧美日韩综合精品二区| 久久久综合网| 欧美黄网免费在线观看| 亚洲一区二区三区精品在线观看| 午夜精品剧场| 亚洲激情在线| 9色国产精品| 国产有码一区二区| 91久久精品日日躁夜夜躁国产| 久久这里只有精品视频首页| 夜夜嗨av一区二区三区中文字幕| 亚洲另类一区二区| 好吊妞这里只有精品| 亚洲国产欧美日韩精品| 国产精品看片资源| 欧美成人情趣视频| 欧美视频官网| 免费一级欧美片在线播放| 欧美日韩日韩| 久久米奇亚洲| 欧美日韩一区三区| 久久都是精品| 久久中文字幕一区二区三区| 欧美日韩精品综合在线| 欧美一区2区三区4区公司二百| 亚洲一区亚洲二区| 亚洲国产一区二区三区高清 | 精品动漫3d一区二区三区| 国产精品福利在线观看| 亚洲国产日韩在线一区模特| 一区二区免费在线观看| 亚洲国产毛片完整版 | 麻豆国产精品一区二区三区| 欧美日本一区| 欧美高清日韩| 国产日产欧美精品| 欧美插天视频在线播放| 在线视频日韩| 久久免费99精品久久久久久| 午夜久久99| 欧美日韩久久精品| 欧美激情小视频| 亚洲大片免费看| 欧美影院成年免费版| 先锋影音网一区二区| 欧美阿v一级看视频| 久久中文欧美| 国内自拍一区| 欧美一区国产二区| 久久九九精品| 国产区日韩欧美| 久久国产精品99久久久久久老狼| 国产精品扒开腿做爽爽爽软件| 亚洲日本激情| 久久综合亚州| 国产亚洲一本大道中文在线| 亚洲永久免费av| 午夜精品视频网站| 欧美日韩免费在线视频| 夜夜嗨av一区二区三区四季av| 夜夜嗨一区二区| 欧美日韩国产综合视频在线观看中文 | 91久久精品久久国产性色也91| 国产精品国产a级| 99精品视频免费| 亚洲性av在线| 国产精品区一区二区三| 正在播放欧美视频| 欧美一区成人| 韩国v欧美v日本v亚洲v| 久久婷婷久久一区二区三区| 亚洲成在线观看| aaa亚洲精品一二三区| 亚洲欧美日韩一区二区三区在线| 一级日韩一区在线观看| 亚洲视频 欧洲视频| 欧美午夜精品久久久| 一本综合久久| 香蕉久久精品日日躁夜夜躁| 国产欧美日韩视频| 欧美影院视频| 欧美成人网在线| 正在播放亚洲| 国产日韩成人精品| 嫩模写真一区二区三区三州| 亚洲精品网址在线观看| 校园春色国产精品| 在线欧美影院| 欧美午夜a级限制福利片| 欧美在线免费视频| 欧美成人免费一级人片100| 亚洲一区精彩视频| 国产精品视频xxxx| 亚洲一区影院| 亚洲区一区二区三区| 欧美亚洲一区二区在线| 亚洲激情视频网站| 国产精品主播| 欧美日韩成人在线播放| 久久爱www久久做| 日韩午夜电影| 久久在线免费观看| 亚洲免费在线精品一区| 亚洲国产成人91精品| 国产精品v欧美精品v日韩精品| 久久久久青草大香线综合精品| 国产一区二区三区久久久久久久久 | 亚洲永久免费av| 国产精品亚洲成人| 欧美不卡高清| 欧美一区二区三区日韩| 99亚洲伊人久久精品影院红桃| 免费看黄裸体一级大秀欧美| 欧美一级艳片视频免费观看| 在线亚洲免费视频| 亚洲电影在线看| 国产老女人精品毛片久久| 欧美精品一区二区三| 久久久在线视频| 午夜国产精品影院在线观看| 在线亚洲精品福利网址导航| 亚洲第一色中文字幕| 久久亚洲春色中文字幕久久久| 一区二区高清视频| 99国产精品视频免费观看| 亚洲欧洲日韩综合二区| …久久精品99久久香蕉国产| 国产日韩精品一区二区三区| 国产精品美女一区二区| 欧美无砖砖区免费| 国产精品久久久久aaaa| 国产精品草莓在线免费观看| 欧美精品在线网站| 欧美人体xx| 欧美二区不卡| 欧美激情精品久久久六区热门| 久久久久久9999| 亚洲欧美自拍偷拍| 欧美一区二区三区成人| 午夜激情综合网| 欧美三级不卡| 中文国产成人精品久久一| 日韩亚洲精品视频| 亚洲视频一二三| 午夜日韩福利| 久久久久99精品国产片| 美女图片一区二区| 欧美日韩国产美| 欧美视频在线免费看| 亚洲女人小视频在线观看| 欧美亚洲免费电影| 欧美在线观看视频一区二区三区| 亚洲无线一线二线三线区别av| 亚洲在线观看视频| 久久超碰97人人做人人爱| 另类春色校园亚洲| 欧美激情第一页xxx| 亚洲人成毛片在线播放| 在线亚洲伦理| 久久久久久亚洲精品杨幂换脸| 免费不卡视频| 国产精品久久久久久久久借妻 | 欧美在现视频| 国产精品家教| 香蕉成人伊视频在线观看 | 欧美在线免费观看| 欧美主播一区二区三区美女 久久精品人 | 日韩视频一区二区三区在线播放免费观看| 国产精品a久久久久| 国产亚洲毛片在线| 一色屋精品视频免费看| 亚洲卡通欧美制服中文| 欧美综合激情网| 亚洲电影观看| 亚洲中无吗在线| 久久亚洲精品伦理| 免费日韩av| 久久久久久久尹人综合网亚洲| 欧美日韩国产a| 欧美午夜无遮挡| 国产精品成人aaaaa网站| 国产农村妇女毛片精品久久麻豆 | 欧美成人精品不卡视频在线观看| 国产精品免费看| 久久久久国产精品www| 欧美成人国产| 亚洲欧美国产另类| 久久人人爽人人爽| 一本综合精品| 亚洲精品一区二区三区四区高清|