⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lex.y

📁 編譯器的辭法分析器工具
💻 Y
字号:
# define TOKEN char# define VALUE char*# define STACKTOKENS 1# define STACKSIZE 2048# include "cc.h"# include "preccx.h"# undef UNSETNAME# include "preamble.h"/* in order to be able to parse .. = <'>'>   !! *//*                          or  .. = >'<'<      */# define RIGHT_ANGLE_BRACKET '>'# define LEFT_ANGLE_BRACKET '<'/* and use  .. = <RIGHT_ANGLE_BRACKET> instead *//* or       .. = >LEFT_ANGLE_BRACKET< */                /* -------- spaces ---------- */@ SPACE = (p_isspace)@       | COMMENT@ WHITESPACE =  SOMESPACE@            | : VV(0)=""; :@ SOMESPACE = SPACE {SPACE : VV(2) = V(1); :}*                /* -- simple identifiers ------ *//* read character into the cbuff */@ alpha     = (p_isalpha)        : VV(1) = putchar(T(1)); :/* append characters to the cbuff */@ IDENTIFIER      = alpha { alnum    : VV(2) = V(1); : }*  @ digit     = (p_isdigit) : VV(1)=putchar(T(1)); :@ alnum     = (p_isalnum) : VV(1)=putchar(T(1)); :/* and these are absorbing */@ OPENBRACKET  = <'['>@ CLOSEBRACKET = <']'>@ OPENPAREN   = <'('>@ CLOSEPAREN  = <')'> @ OPENBRACE   = <'{'>@ CLOSEBRACE  = <'}'>@ NUMBER = integer optmantissa optexponent : VV(3) = V(1); :@ digits = somedigits@        | : VV(0)=""; :@ optsign = sign@         | : VV(0)=""; :@ somedigits = digit {digit : VV(2) = V(1); :}*@ sign = {<'-'> | <'+'>} : VV(1)=putchar(T(1)); :@ mantissa = point [ somedigits : VV(2) = V(1); : ]@ optmantissa = mantissa@             | : VV(0)=""; :@ point = <'.'> : VV(1)=putchar('.'); :@ E = { <'e'> | <'E'> } : VV(1)=putchar(T(1)); :@ exponent = E integer : VV(2) = V(1); :@ optexponent = exponent@             | : VV(0)=""; :@ singlequote = <'\''> : VV(1)=putchar('\''); :@ escape = <'\\'> @ ANYTHING = ? @ notasinglequote = >'\''< @ chr = escape ANYTHING : VV(2)=V(1);putchar('\\');putchar(T(2)); :@     | notasinglequote : VV(1)=putchar(T(1));:@ CHARCONST = singlequote chr singlequote : VV(3)=V(1); :@ STRING = doublequote strchrs doublequote : VV(3)=V(1); :@ doublequote = <'\"'> : VV(1)=putchar('\"'); :@ strchar = escape ANYTHING : VV(2) = V(1);putchar('\\');putchar(T(2)); :@         | notadoublequote : VV(1) = putchar(T(1)); :@ notadoublequote = >'\"'< @ strchrs = strchar {strchar : VV(2)=V(1); :}*@         | : VV(0)=""; :@ BACKSLASH = <'\\'>@ DOLLAR = <'$'>@ CARET = <'^'>@ PLING = <'!'>@ PLUS = <'+'>@ DOLLARID = <'$'> <'$'> :VV(2)=putname("(TOVALUE p_1)");:@          | { <'$'> :putname("(TOVALUE )p_");@                   /*putint((1+getcount())*PSTACKLENGTH/10); */@                    : } integer :VV(2)=V(2);putchar(')');:@          | { <'$'> :putname("(TOVALUE ");:} IDENTIFIER :VV(2)=putchar(')');:@ integer  = optsign somedigits :VV(2)=V(2);:@BINOPCHAR = { <'+'>@            | <'-'>@            | <'*'>@            | <'/'>@            | <'%'>@            | <'&'>@            | <'|'>@            | <'!'>@            | <'='>@            | <'<'>@            | <RIGHT_ANGLE_BRACKET>@            }@ PLUSPLUS = <'+'> <'+'>@ MINUSMINUS = <'-'> <'-'>@ MONOPCHAR= { <'+'>@            | <'-'>@            | <'&'> @            | <'*'> @            | <'!'>@            }@ LEFTANGLEBRACKET = <'<'>@ RIGHTANGLEBRACKET = <RIGHT_ANGLE_BRACKET>@ NOTARIGHTANGLEBRACKET= escape ANYTHING :VV(2)=V(2);:@                      | >'>'<@ NOTALEFTANGLEBRACKET = escape ANYTHING :VV(2)=V(2);:@                      | >LEFT_ANGLE_BRACKET<@ SLASH = <'/'>@ STAR = <'*'>@ AT = <'@'>@ EQUALS = <'='>@ NOTANAT = >'@'< @ OR = <'|'>@ COLON = <':'>@ COLONorEOL =  COLON@            | $@ COMMA = <','>@ NOTACOLON = escape ANYTHING :VV(2)=V(2);:@           | >':'<@ QUESTION = <'?'>@ slashstar= SLASH STAR :VV(2)=putname("/*");:@ starslash= STAR SLASH :VV(2)=putname("*/");:@ COMMENT  = slashstar@            { commentchr :VV(2)=V(1);: }*@            starslash :VV(2)=V(1);:/* $!{foo} ought to try and recover at foo */@ commentchr = NOTASTAR       : VV(1) = putchar(T(1));:@            | $!             : VV(1) = putchar('\n');:@            | STAR NOTASLASH : VV(2) = (putchar('*'),putchar(T(2)));:@ NOTASTAR = >'*'<@ NOTASLASH = >'/'<@ SEMICOLON = <';'>@ ELLIPSIS  = <'.'> <'.'> <'.'> : VV(3) = V(1);:/*   finis   */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -