`
pf_miles
  • 浏览: 131568 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

flex基础小记

阅读更多
The `flex' input file consists of three sections, separated by a line
containing only `%%'.

definitions
%%
rules
%%
user code


Some patterns:

`\123'
     the character with octal value 123

`\x2a'
     the character with hexadecimal value 2a
    
`(?r-s:pattern)'
     apply option `r' and omit option `s' while interpreting pattern.
     Options may be zero or more of the characters `i', `s', or `x'.
    
`(?# comment )'
     omit everything within `()'. The first `)' character encountered
     ends the pattern. It is not possible to for the comment to contain
     a `)' character. The comment may span lines.\

`r/s'
     an `r' but only if it is followed by an `s'.
    
`<s>r'
     an `r', but only in start condition `s'

`<s1,s2,s3>r'
     same, but in any of start conditions `s1', `s2', or `s3'.

`<<EOF>>'
     an end-of-file.

`<s1,s2><<EOF>>'
     an end-of-file when in start condition `s1' or `s2'
    
character class expressions:
    [:alnum:] [:alpha:] [:blank:]
    [:cntrl:] [:digit:] [:graph:]
    [:lower:] [:print:] [:punct:]
    [:space:] [:upper:] [:xdigit:]

    [:^alnum:] [:^alpha:] [:^blank:]
    [:^cntrl:] [:^digit:] [:^graph:]
    [:^lower:] [:^print:] [:^punct:]
    [:^space:] [:^upper:] [:^xdigit:]

    The `{-}' operator computes the difference of two character classes, '{+}' does a union operation.

匹配方式是“最大长度优先”,长度一样时写在前面的优先。

每当匹配到一个token时,这个token能在全局char型指针'yytext'中被找到,它的长度可以从全局int 'yyleng'里读到;这个token对应的action也在这个时候被执行;token之后的文本被继续扫描。

actions special directives:
    `ECHO'
     copies yytext to the scanner's output.
    
     `BEGIN'
     followed by the name of a start condition places the scanner in the
     corresponding start condition
    
     `REJECT'
     directs the scanner to proceed on to the "second best" rule which
     matched the input (or a prefix of the input).
    
     `yymore()'
     tells the scanner that the next time it matches a rule, the
     corresponding token should be _appended_ onto the current value of
     `yytext' rather than replacing it.
    
     `yyless(n)' returns all but the first `n' characters of the current
     token back to the input stream, where they will be rescanned when the
     scanner looks for the next match.  `yytext' and `yyleng' are adjusted
     appropriately
    
     `input()' reads the next character from the input stream.
    
     `YY_FLUSH_BUFFER()' flushes the scanner's internal buffer
    
     `yyterminate()' can be used in lieu of a return statement in an
     action.

Start Conditions:
    `%s' or '%x' represents "inclusive" start conditions or "exclusive" start conditions.
    `BEGIN(INITIAL)' is equivalent to `BEGIN(0)'
    We can access the current start condition using the integer-valued `YY_START' macro, and Flex provides `YYSTATE' as an alias for `YY_START'

Multiple Input Buffers:
    -- Function: YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size )

    which takes a `FILE' pointer and a size and creates a buffer associated with the given file and large enough to hold `size' characters (when in doubt, use `YY_BUF_SIZE' for the size).
   
    -- Function: void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer )

    The above function switches the scanner's input buffer so subsequent tokens will come from `new_buffer'.
   
    -- Function: void yy_delete_buffer ( YY_BUFFER_STATE buffer )

    is used to reclaim the storage associated with a buffer.
   
    -- Function: void yypush_buffer_state ( YY_BUFFER_STATE buffer )

    This function pushes the new buffer state onto an internal stack.
   
    -- Function: void yypop_buffer_state ( )

    This function removes the current state from the top of the stack, and deletes it by calling `yy_delete_buffer'.
   
    -- Function: void yy_flush_buffer ( YY_BUFFER_STATE buffer )

    This function discards the buffer's contents
   
    -- Function: YY_BUFFER_STATE yy_new_buffer ( FILE *file, int size )

    is an alias for `yy_create_buffer()'
   
    `YY_CURRENT_BUFFER' macro returns a `YY_BUFFER_STATE' handle to the current buffer. It should not be used as an lvalue.
   
    -- Function: YY_BUFFER_STATE yy_scan_string ( const char *str )
    scans a NUL-terminated string.
   
    -- Function: YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len )
    scans `len' bytes (including possibly `NUL's) starting at location `bytes'.
   
    Note that both of above two functions create and scan a _copy_ of the string or bytes.You can avoid the copy by using:

    -- Function: YY_BUFFER_STATE yy_scan_buffer (char *base, yy_size_t size)
    the last two bytes of which _must_ be `YY_END_OF_BUFFER_CHAR' (ASCII NUL).  These last two bytes are not scanned; thus, scanning consists of `base[0]' through `base[size-2]', inclusive.
   
    -- Data type: yy_size_t
    is an integral type to which you can cast an integer expression reflecting the size of the buffer.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics