亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lex-docs.txt

?? 句法分析器。一般用文法(grammar)來刻畫.常見的是短語結構文法(chomsky hierarchy),其中最常用的是上下文無關文法(CFG)。
?? TXT
?? 第 1 頁 / 共 4 頁
字號:
http://www.cs.ucsb.edu/~cs160/machines/lex-docs.txt



                     Lex - A Lexical Analyzer Generator


                          M. E. Lesk and E. Schmidt



                                  ABSTRACT


       Lex helps write programs whose control flow is  directed  by
  instances of regular expressions in the input stream.  It is well
  suited for editor-script type transformations and for  segmenting
  input in preparation for a parsing routine.

       Lex source is a table of regular expressions and correspond-
  ing  program  fragments.   The  table  is translated to a program
  which reads an input stream, copying it to an output  stream  and
  partitioning the input into strings which match the given expres-
  sions.  As each such string is recognized the corresponding  pro-
  gram fragment is executed.  The recognition of the expressions is
  performed by a deterministic finite automaton generated  by  Lex.
  The  program  fragments  written  by the user are executed in the
  order in which the corresponding regular expressions occur in the
  input stream.

       The lexical analysis programs written with Lex accept  ambi-
  guous  specifications  and  choose  the longest match possible at
  each input point.  If necessary, substantial  lookahead  is  per-
  formed  on  the  input, but the input stream will be backed up to
  the end of the current partition, so that the  user  has  general
  freedom to manipulate it.

       Lex can generate analyzers in either C or Ratfor, a language
  which can be translated automatically to portable Fortran.  It is
  available on the PDP-11 UNIX, Honeywell GCOS, and IBM OS systems.
  This manual, however, will only discuss generating analyzers in C
  on the UNIX system, which is the only supported form of Lex under
  UNIX  Version  7.   Lex  is designed to simplify interfacing with
  Yacc, for those with access to this compiler-compiler system.



1.  Introduction.

     Lex is a program generator designed for lexical processing of
character input streams.  It accepts a high-level, problem
oriented specification for character string matching, and produces
a program in a general purpose language which recognizes regular
expressions.  The regular expressions are specified by the user in
the source specifications given to Lex.  The Lex written code
recognizes these expressions in an input stream and partitions the
input stream into strings matching the expressions.  At the
boundaries between strings program sections provided by the user
are executed.  The Lex source file associates the regular
expressions and the program fragments.  As each expression appears
in the input to the program written by Lex, the corresponding
fragment is executed.

     The user supplies the additional code beyond expression
matching needed to complete his tasks, possibly including code
written by other generators.  The program that recognizes the
expressions is generated in the general purpose programming
language employed for the user's program fragments.  Thus, a high
level expression language is provided to write the string
expressions to be matched while the user's freedom to write
actions is unimpaired.  This avoids forcing the user who wishes to
use a string manipulation language for input analysis to write
processing programs in the same and often inappropriate string
handling language.

     Lex is not a complete language, but rather a generator
representing a new language feature which can be added to
different programming languages, called ``host languages.'' Just
as general purpose languages can produce code to run on different
computer hardware, Lex can write code in different host languages.
The host language is used for the output code generated by Lex and
also for the program fragments added by the user.  Compatible
run-time libraries for the different host languages are also
provided.  This makes Lex adaptable to different environments and
different users.  Each application may be directed to the
combination of hardware and host language appropriate to the task,
the user's background, and the properties of local implementa-
tions.  At present, the only supported host language is C,
although Fortran (in the form of Ratfor [2] has been available in
the past.  Lex itself exists on UNIX, GCOS, and OS/370; but the
code generated by Lex may be taken anywhere the appropriate
compilers exist.

     Lex turns the user's expressions and actions (called source
in this memo) into the host general-purpose language; the
generated program is named yylex.  The yylex program will
recognize expressions in a stream (called input in this memo) and
perform the specified actions for each expression as it is
detected.  See Figure 1.
                                  +-------+
                        Source -> |  Lex  |  -> yylex
                                  +-------+

                                  +-------+
                        Input ->  | yylex | -> Output
                                  +-------+

                             An overview of Lex
                                  Figure 1

     For a trivial example, consider a program to delete from the
input all blanks or tabs at the ends of lines.
                                 %%
                                 [ \t]+$   ;
is all that is required.  The program contains a %% delimiter to
mark the beginning of the rules, and one rule.  This rule contains
a regular expression which matches one or more instances of the
characters blank or tab (written \t for visibility, in accordance
with the C language convention) just prior to the end of a line.
The brackets indicate the character class made of blank and tab;
the + indicates ``one or more ...''; and the $ indicates ``end
of line,'' as in QED.  No action is specified, so the program
generated by Lex (yylex) will ignore these characters.  Everything
else will be copied.  To change any remaining string of blanks or
tabs to a single blank, add another rule:
                           %%
                           [ \t]+$   ;
                           [ \t]+    printf(" ");
The finite automaton generated for this source will scan for both
rules at once, observing at the termination of the string of
blanks or tabs whether or not there is a newline character, and
executing the desired rule action.  The first rule matches all
strings of blanks or tabs at the end of lines, and the second rule
all remaining strings of blanks or tabs.

     Lex can be used alone for simple transformations, or for
analysis and statistics gathering on a lexical level.  Lex can
also be used with a parser generator to perform the lexical
analysis phase; it is particularly easy to interface Lex and Yacc
[3].  Lex programs recognize only regular expressions; Yacc writes
parsers that accept a large class of context free grammars, but
require a lower level analyzer to recognize input tokens.  Thus, a
combination of Lex and Yacc is often appropriate.  When used as
a preprocessor for a later parser generator, Lex is used to
partition the input stream, and the parser generator assigns
structure to the resulting pieces.  The flow of control in such
a case (which might be the first half of a compiler, for exam-
ple) is shown in Figure 2.  Additional programs, written by other
generators or by hand, can be added easily to programs written by
Lex.
                        lexical        grammar
                         rules          rules
                           |              |
                           v              v
                      +---------+    +---------+
                      |   Lex   |    |  Yacc   |
                      +---------+    +---------+
                           |              |
                           v              v
                      +---------+    +---------+
             Input -> |  yylex  | -> | yyparse | -> Parsed input
                      +---------+    +---------+


                            Lex with Yacc
                               Figure 2
Yacc users will realize that the name yylex is what Yacc expects
its lexical analyzer to be named, so that the use of this name by
Lex simplifies interfacing.

     Lex generates a deterministic finite automaton from the
regular expressions in the source [4].  The automaton is
interpreted, rather than compiled, in order to save space.  The
result is still a fast analyzer.  In particular, the time taken by
a Lex program to recognize and partition an input stream is
proportional to the length of the input.  The number of Lex rules
or the complexity of the rules is not important in determining
speed, unless rules which include forward context require a
significant amount of rescanning.  What does increase with the
number and complexity of rules is the size of the finite
automaton, and therefore the size of the program generated by Lex.

     In the program written by Lex, the user's fragments
(representing the actions to be performed as each regular
expression is found) are gathered as cases of a switch.  The
automaton interpreter directs the control flow.  Opportunity is
provided for the user to insert either declarations or addi-
tional statements in the routine containing the actions, or to add
subroutines outside this action routine.

     Lex is not limited to source which can be interpreted on the
basis of one character lookahead.  For example, if there are two
rules, one looking for ab and another for abcdefg, and the input
stream is abcdefh, Lex will recognize ab and leave the input
pointer just before cd. . .  Such backup is more costly than the
processing of simpler languages.

2.  Lex Source.

     The general format of Lex source is:
                             {definitions}
                             %%
                             {rules}
                             %%
                             {user subroutines}
where the definitions and the user subroutines are often omitted.
The second %% is optional, but the first is required to mark the
beginning of the rules.  The absolute minimum Lex program is thus
                                     %%
(no definitions, no rules) which translates into a program which
copies the input to the output unchanged.

     In the outline of Lex programs shown above, the rules
represent the user's control decisions; they are a table, in which
the left column contains regular expressions (see section 3) and
the right column contains actions, program fragments to be
executed when the expressions are recognized.  Thus an individual
rule might appear
                   integer   printf("found keyword INT");
to look for the string integer in the input stream and print the
message ``found keyword INT'' whenever it appears.  In this
example the host procedural language is C and the C library
function printf is used to print the string.  The end of the
expression is indicated by the first blank or tab character.  If
the action is merely a single C expression, it can just be given
on the right side of the line; if it is compound, or takes more
than a line, it should be enclosed in braces.  As a slightly more
useful example, suppose it is desired to change a number of words
from British to American spelling.  Lex rules such as
                      colour      printf("color");
                      mechanise   printf("mechanize");
                      petrol      printf("gas");
would be a start.  These rules are not quite enough, since the
word petroleum would become gaseum; a way of dealing with this
will be described later.

3.  Lex Regular Expressions.

     The definitions of regular expressions are very similar to
those in QED [5].  A regular expression specifies a set of strings
to be matched.  It contains text characters (which match the
corresponding characters in the strings being compared) and
operator characters (which specify repetitions, choices, and other
features).  The letters of the alphabet and the digits are always
text characters; thus the regular expression
                                 integer
matches the string integer wherever it appears and the expression
                                    a57D
looks for the string a57D.

     Operators.  The operator characters are
                   " \ [ ] ^ - ? . * + | ( ) $ / { } % < >
and if they are to be used as text characters, an escape should be
used.  The quotation mark operator (") indicates that whatever is
contained between a pair of quotes is to be taken as text
characters.  Thus
                                   xyz"++"
matches the string xyz++ when it appears.  Note that a part of a
string may be quoted.  It is harmless but unnecessary to quote an
ordinary text character; the expression
                                   "xyz++"
is the same as the one above.  Thus by quoting every
non-alphanumeric character being used as a text character, the
user can avoid remembering the list above of current operator
characters, and is safe should further extensions to Lex lengthen
the list.

     An operator character may also be turned into a text
character by preceding it with \ as in
                                   xyz\+\+
which is another, less readable, equivalent of the above
expressions.  Another use of the quoting mechanism is to get a
blank into an expression; normally, as explained above, blanks or
tabs end a rule.  Any blank character not contained within [] (see
below) must be quoted.  Several normal C escapes with \ are
recognized: \n is newline, \t is tab, and \b is backspace.  To
enter \ itself, use \\.  Since newline is illegal in an
expression, \n must be used; it is not required to escape tab and
backspace.  Every character but blank, tab, newline and the list
above is always a text character.

     Character classes.  Classes of characters can be specified
using the operator pair [].  The construction [abc] matches a
single character, which may be a, b, or c.  Within square
brackets, most operator meanings are ignored.  Only three
characters are special: these are \ - and ^.  The - character
indicates ranges.  For example,
                                 [a-z0-9<>_]
indicates the character class containing all the lower case
letters, the digits, the angle brackets, and underline.  Ranges
may be given in either order.  Using - between any pair of

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道a无线码一区v| 成人a区在线观看| 亚洲素人一区二区| 日本一区二区免费在线| 久久一留热品黄| 久久久亚洲精品石原莉奈| 欧美mv日韩mv亚洲| 精品国产免费人成电影在线观看四季| 欧美精品电影在线播放| 67194成人在线观看| 91麻豆精品国产自产在线观看一区| 欧美午夜理伦三级在线观看| 欧美日韩在线播放三区四区| 欧美人狂配大交3d怪物一区| 欧美男人的天堂一二区| 欧美一二三四区在线| 欧美va亚洲va香蕉在线| 久久久噜噜噜久久中文字幕色伊伊 | 91农村精品一区二区在线| 成人精品国产一区二区4080| www.日韩av| 欧美日韩国产区一| 欧美α欧美αv大片| 欧美经典一区二区三区| 一区二区视频免费在线观看| 日韩黄色小视频| 国产精品亚洲综合一区在线观看| 成人av中文字幕| 精品污污网站免费看| 日韩精品自拍偷拍| 国产精品国产三级国产aⅴ中文| 亚洲精品成人悠悠色影视| 日本va欧美va瓶| 成人毛片视频在线观看| 精品视频免费在线| 久久午夜老司机| 亚洲综合视频在线观看| 精品一区二区日韩| 91网站最新网址| 日韩欧美国产电影| 亚洲久草在线视频| 理论电影国产精品| 色一区在线观看| 欧美精品一区二区三区在线| 一区二区三区在线免费视频 | 日韩三级免费观看| 中文字幕av一区二区三区免费看 | 日韩国产欧美视频| 成人午夜视频在线| 日韩写真欧美这视频| 亚洲色图视频网| 韩国女主播成人在线观看| 欧美性猛片aaaaaaa做受| 久久新电视剧免费观看| 日韩精品午夜视频| 日本韩国一区二区| 国产精品视频线看| 精品一区二区三区日韩| 欧美日韩视频不卡| 一区二区三区中文字幕电影| 国产不卡在线视频| 久久精品在线观看| 免费观看久久久4p| 9191久久久久久久久久久| 亚洲日本在线天堂| av在线这里只有精品| 久久这里只有精品首页| 久久国产成人午夜av影院| 在线综合视频播放| 天天色综合成人网| 欧美日韩亚洲另类| 亚洲h在线观看| 欧美日韩精品一区二区三区蜜桃| 亚洲色大成网站www久久九九| 成人福利在线看| 亚洲国产精品激情在线观看| 国产在线视频一区二区三区| 欧美xxxx在线观看| 国产伦精品一区二区三区在线观看| 日韩免费电影网站| 国产一区二区女| 久久久久国产精品麻豆ai换脸 | 中文字幕免费在线观看视频一区| 国产在线播放一区三区四| 欧美成人aa大片| 激情小说欧美图片| 日本一区二区免费在线观看视频| 国产成人av资源| 国产精品久久久久9999吃药| av在线播放不卡| 亚洲精品国产精华液| 欧美亚洲综合在线| 麻豆精品一区二区综合av| 欧美精品一区二区三| 国产精品456| 日韩一区日韩二区| 欧美日韩国产另类一区| 老司机精品视频在线| 国产日韩欧美一区二区三区综合| eeuss国产一区二区三区| 亚洲裸体在线观看| 91精品国产91久久久久久最新毛片 | 亚洲电影中文字幕在线观看| 日韩一区二区三区观看| 国产精品一卡二卡| 亚洲女性喷水在线观看一区| 精品视频在线免费看| 久久99精品久久久久久国产越南| 国产亚洲污的网站| 欧美在线free| 国产在线一区二区综合免费视频| 亚洲三级免费电影| 欧美r级电影在线观看| 99精品热视频| 日本免费在线视频不卡一不卡二| 久久精品在线免费观看| 欧洲色大大久久| 国产99一区视频免费| 午夜精品福利在线| 亚洲国产精品二十页| 欧美三级蜜桃2在线观看| 国产传媒一区在线| 日韩国产欧美在线播放| 国产精品国产精品国产专区不蜜 | 91视频观看视频| 日本vs亚洲vs韩国一区三区二区| 国产精品久久久久毛片软件| 日韩一区二区免费在线观看| 91社区在线播放| 国产成人综合网| 日本三级亚洲精品| 亚洲男女毛片无遮挡| 日韩欧美国产1| 欧美精品在欧美一区二区少妇| 成人动漫一区二区在线| 精品亚洲免费视频| 午夜亚洲国产au精品一区二区| 中文字幕色av一区二区三区| 精品国产成人系列| 欧美丰满一区二区免费视频| 91福利在线播放| 91麻豆国产香蕉久久精品| 国产麻豆91精品| 加勒比av一区二区| 日韩经典一区二区| 午夜精品久久久| 午夜激情一区二区三区| 亚洲日本乱码在线观看| 中文字幕一区二区三区在线播放| 久久久亚洲国产美女国产盗摄| 精品卡一卡二卡三卡四在线| 日韩欧美一级精品久久| 欧美日韩国产不卡| 欧美福利视频导航| 日韩一二三区视频| 精品国产sm最大网站免费看| 日韩精品一区二区三区在线观看| 91精品国产麻豆国产自产在线| 欧美日韩国产成人在线免费| 欧美顶级少妇做爰| 欧美一区二区三区小说| 欧美大片在线观看一区二区| 日韩美女视频在线| 久久综合成人精品亚洲另类欧美| 久久久一区二区三区| 欧美经典一区二区| 亚洲女厕所小便bbb| 亚洲一区在线观看网站| 亚洲一区二区在线观看视频| 亚洲福利视频导航| 日韩电影免费在线看| 激情偷乱视频一区二区三区| 国产a久久麻豆| 91国偷自产一区二区三区成为亚洲经典| 色婷婷综合五月| 欧美四级电影网| 精品少妇一区二区| 国产精品免费久久久久| 悠悠色在线精品| 男人的天堂久久精品| 国产成人综合在线观看| 色婷婷av久久久久久久| 日韩欧美国产小视频| 亚洲国产精品成人综合色在线婷婷| 综合av第一页| 美国十次综合导航| 99久久婷婷国产综合精品| 欧美日韩在线直播| 久久久精品欧美丰满| 亚洲自拍偷拍九九九| 久久丁香综合五月国产三级网站| 成人精品国产福利| 正在播放亚洲一区| 亚洲欧美一区二区在线观看| 蜜臀国产一区二区三区在线播放| 国产精品白丝jk黑袜喷水| 欧美日韩一级片在线观看| 国产欧美精品区一区二区三区| 亚洲成精国产精品女| 成人免费视频app|