📄 cpp5.l
字号:
octal_escape [0-7]{1,3}
hex_escape "x"[0-9a-fA-F]+
escape_sequence [\\]({simple_escape}|{octal_escape}|{hex_escape})
c_char [^'\\\n]|{escape_sequence}
s_char [^"\\\n]|{escape_sequence}
h_tab [\011]
form_feed [\014]
v_tab [\013]
c_return [\015]
horizontal_white [ ]|{h_tab}
%%
{horizontal_white}+ {
WHITE_RETURN(' ');
}
({v_tab}|{c_return}|{form_feed})+ {
WHITE_RETURN(' ');
}
({horizontal_white}|{v_tab}|{c_return}|{form_feed})*"\n" {
NEW_LINE_RETURN();
}
auto {PA_KEYWORD_RETURN(AUTO);}
break {PA_KEYWORD_RETURN(BREAK);}
case {PA_KEYWORD_RETURN(CASE);}
char {PA_KEYWORD_RETURN(CHAR);}
const {PA_KEYWORD_RETURN(CONST);}
continue {PA_KEYWORD_RETURN(CONTINUE);}
default {PA_KEYWORD_RETURN(DEFAULT);}
define {PP_KEYWORD_RETURN(DEFINE);}
defined {PP_KEYWORD_RETURN(OPDEFINED);}
do {PA_KEYWORD_RETURN(DO);}
double {PA_KEYWORD_RETURN(DOUBLE);}
elif {PP_KEYWORD_RETURN(ELIF);}
else {PPPA_KEYWORD_RETURN(ELSE);}
endif {PP_KEYWORD_RETURN(ENDIF);}
enum {PA_KEYWORD_RETURN(ENUM);}
error {PP_KEYWORD_RETURN(ERROR);}
extern {PA_KEYWORD_RETURN(EXTERN);}
float {PA_KEYWORD_RETURN(FLOAT);}
for {PA_KEYWORD_RETURN(FOR);}
goto {PA_KEYWORD_RETURN(GOTO);}
if {PPPA_KEYWORD_RETURN(IF);}
ifdef {PP_KEYWORD_RETURN(IFDEF);}
ifndef {PP_KEYWORD_RETURN(IFNDEF);}
include {PP_KEYWORD_RETURN(INCLUDE); }
int {PA_KEYWORD_RETURN(INT);}
line {PP_KEYWORD_RETURN(LINE);}
long {PA_KEYWORD_RETURN(LONG);}
pragma {PP_KEYWORD_RETURN(PRAGMA);}
register {PA_KEYWORD_RETURN(REGISTER);}
return {PA_KEYWORD_RETURN(RETURN);}
short {PA_KEYWORD_RETURN(SHORT);}
signed {PA_KEYWORD_RETURN(SIGNED);}
sizeof {PA_KEYWORD_RETURN(SIZEOF);}
static {PA_KEYWORD_RETURN(STATIC);}
struct {PA_KEYWORD_RETURN(STRUCT);}
switch {PA_KEYWORD_RETURN(SWITCH);}
typedef {PA_KEYWORD_RETURN(TYPEDEF);}
undef {PP_KEYWORD_RETURN(UNDEF);}
union {PA_KEYWORD_RETURN(UNION);}
unsigned {PA_KEYWORD_RETURN(UNSIGNED);}
void {PA_KEYWORD_RETURN(VOID);}
volatile {PA_KEYWORD_RETURN(VOLATILE);}
while {PA_KEYWORD_RETURN(WHILE);}
class {CPP_KEYWORD_RETURN(CLASS);}
delete {CPP_KEYWORD_RETURN(DELETE);}
friend {CPP_KEYWORD_RETURN(FRIEND);}
inline {CPP_KEYWORD_RETURN(INLINE);}
new {CPP_KEYWORD_RETURN(NEW);}
operator {CPP_KEYWORD_RETURN(OPERATOR);}
overload {CPP_KEYWORD_RETURN(OVERLOAD);}
protected {CPP_KEYWORD_RETURN(PROTECTED);}
private {CPP_KEYWORD_RETURN(PRIVATE);}
public {CPP_KEYWORD_RETURN(PUBLIC);}
this {CPP_KEYWORD_RETURN(THIS);}
virtual {CPP_KEYWORD_RETURN(VIRTUAL);}
{identifier} {IDENTIFIER_RETURN();}
{decimal_constant} {NUMERICAL_RETURN(INTEGERconstant);}
{octal_constant} {NUMERICAL_RETURN(OCTALconstant);}
{hex_constant} {NUMERICAL_RETURN(HEXconstant);}
{floating_constant} {NUMERICAL_RETURN(FLOATINGconstant);}
"L"?[']{c_char}+['] {
NUMERICAL_RETURN(CHARACTERconstant);
}
"L"?["]{s_char}*["] {
LITERAL_RETURN(STRINGliteral);}
"(" {PPOP_RETURN(LP);}
")" {PPOP_RETURN(RP);}
"," {PPOP_RETURN(COMMA);}
"#" {NAMED_PPOP_RETURN('#') ;}
"##" {NAMED_PPOP_RETURN(POUNDPOUND);}
"{" {ASCIIOP_RETURN(LC);}
"}" {ASCIIOP_RETURN(RC);}
"[" {ASCIIOP_RETURN(LB);}
"]" {ASCIIOP_RETURN(RB);}
"." {ASCIIOP_RETURN(DOT);}
"&" {ASCIIOP_RETURN(AND);}
"*" {ASCIIOP_RETURN(STAR);}
"+" {ASCIIOP_RETURN(PLUS);}
"-" {ASCIIOP_RETURN(MINUS);}
"~" {ASCIIOP_RETURN(NEGATE);}
"!" {ASCIIOP_RETURN(NOT);}
"/" {ASCIIOP_RETURN(DIV);}
"%" {ASCIIOP_RETURN(MOD);}
"<" {ASCIIOP_RETURN(LT);}
">" {ASCIIOP_RETURN(GT);}
"^" {ASCIIOP_RETURN(XOR);}
"|" {ASCIIOP_RETURN(PIPE);}
"?" {ASCIIOP_RETURN(QUESTION);}
":" {ASCIIOP_RETURN(COLON);}
";" {ASCIIOP_RETURN(SEMICOLON);}
"=" {ASCIIOP_RETURN(ASSIGN);}
".*" {NAMEDOP_RETURN(DOTstar);}
"::" {NAMEDOP_RETURN(CLCL);}
"->" {NAMEDOP_RETURN(ARROW);}
"->*" {NAMEDOP_RETURN(ARROWstar);}
"++" {NAMEDOP_RETURN(ICR);}
"--" {NAMEDOP_RETURN(DECR);}
"<<" {NAMEDOP_RETURN(LS);}
">>" {NAMEDOP_RETURN(RS);}
"<=" {NAMEDOP_RETURN(LE);}
">=" {NAMEDOP_RETURN(GE);}
"==" {NAMEDOP_RETURN(EQ);}
"!=" {NAMEDOP_RETURN(NE);}
"&&" {NAMEDOP_RETURN(ANDAND);}
"||" {NAMEDOP_RETURN(OROR);}
"*=" {NAMEDOP_RETURN(MULTassign);}
"/=" {NAMEDOP_RETURN(DIVassign);}
"%=" {NAMEDOP_RETURN(MODassign);}
"+=" {NAMEDOP_RETURN(PLUSassign);}
"-=" {NAMEDOP_RETURN(MINUSassign);}
"<<=" {NAMEDOP_RETURN(LSassign);}
">>=" {NAMEDOP_RETURN(RSassign);}
"&=" {NAMEDOP_RETURN(ANDassign);}
"^=" {NAMEDOP_RETURN(ERassign);}
"|=" {NAMEDOP_RETURN(ORassign);}
"..." {NAMEDOP_RETURN(ELLIPSIS);}
%%
/* I won't bother to provide any error recovery. I won't even handle
unknown characters */
/*******************************************************************/
int isaTYPE(string)
char * string;
{
/* We should really be maintaining a symbol table, and be
carefully keeping track of what the current scope is (or in the
case of "rescoped" stuff, what scope to look in). Since the
grammar is not annotated with actions to track transitions to
various scopes, and there is no symbol table, we will supply a
hack to allow folks to test the grammar out. THIS IS NOT A
COMPLETE IMPLEMENTATION!!!! */
return ('A' <= string[0] && 'Z' >= string[0]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -