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

📄 c语法.c

📁 语言的语法,格式严紧,对于处理yacc,lex有帮助!
💻 C
📖 第 1 页 / 共 2 页
字号:
X 

Xparameter_type_list 

X : parameter_list 

X | parameter_list ',' ELIPSIS 

X ; 

X 

Xparameter_list 

X : parameter_declaration 

X | parameter_list ',' parameter_declaration 

X ; 

X 

Xparameter_declaration 

X : type_specifier_list declarator 

X | type_name 

X ; 

X 

Xtype_name 

X : type_specifier_list 

X | type_specifier_list abstract_declarator 

X ; 

X 

Xabstract_declarator 

X : pointer 

X | abstract_declarator2 

X | pointer abstract_declarator2 

X ; 

X 

Xabstract_declarator2 

X : '(' abstract_declarator ')' 

X | '[' ']' 

X | '[' constant_expr ']' 

X | abstract_declarator2 '[' ']' 

X | abstract_declarator2 '[' constant_expr ']' 

X | '(' ')' 

X | '(' parameter_type_list ')' 

X | abstract_declarator2 '(' ')' 

X | abstract_declarator2 '(' parameter_type_list ')' 

X ; 

X 

Xinitializer 

X : assignment_expr 

X | '{' initializer_list '}' 

X | '{' initializer_list ',' '}' 

X ; 

X 

Xinitializer_list 

X : initializer 

X | initializer_list ',' initializer 

X ; 

X 

Xstatement 

X : labeled_statement 

X | compound_statement 

X | expression_statement 

X | selection_statement 

X | iteration_statement 

X | jump_statement 

X ; 

X 

Xlabeled_statement 

X : identifier ':' statement 

X | CASE constant_expr ':' statement 

X | DEFAULT ':' statement 

X ; 

X 

Xcompound_statement 

X : '{' '}' 

X | '{' statement_list '}' 

X | '{' declaration_list '}' 

X | '{' declaration_list statement_list '}' 

X ; 

X 

Xdeclaration_list 

X : declaration 

X | declaration_list declaration 

X ; 

X 

Xstatement_list 

X : statement 

X | statement_list statement 

X ; 

X 

Xexpression_statement 

X : ';' 

X | expr ';' 

X ; 

X 

Xselection_statement 

X : IF '(' expr ')' statement 

X | IF '(' expr ')' statement ELSE statement 

X | SWITCH '(' expr ')' statement 

X ; 

X 

Xiteration_statement 

X : WHILE '(' expr ')' statement 

X | DO statement WHILE '(' expr ')' ';' 

X | FOR '(' ';' ';' ')' statement 

X | FOR '(' ';' ';' expr ')' statement 

X | FOR '(' ';' expr ';' ')' statement 

X | FOR '(' ';' expr ';' expr ')' statement 

X | FOR '(' expr ';' ';' ')' statement 

X | FOR '(' expr ';' ';' expr ')' statement 

X | FOR '(' expr ';' expr ';' ')' statement 

X | FOR '(' expr ';' expr ';' expr ')' statement 

X ; 

X 

Xjump_statement 

X : GOTO identifier ';' 

X | CONTINUE ';' 

X | BREAK ';' 

X | RETURN ';' 

X | RETURN expr ';' 

X ; 

X 

Xfile 

X : external_definition 

X | file external_definition 

X ; 

X 

Xexternal_definition 

X : function_definition 

X | declaration 

X ; 

X 

Xfunction_definition 

X : declarator function_body 

X | declaration_specifiers declarator function_body 

X ; 

X 

Xfunction_body 

X : compound_statement 

X | declaration_list compound_statement 

X ; 

X 

Xidentifier 

X : IDENTIFIER 

X ; 

X%% 

X 

X#include <stdio.h> 

X 

Xextern char yytext[]; 

Xextern int column; 

X 

Xyyerror(s) 

Xchar *s; 

X{ 

X fflush(stdout); 

X printf("\n%*s\n%*s\n", column, "^", column, s); 

X} 

SHAR_EOF 

chmod 0644 gram.y || echo "restore of gram.y fails" 

echo "x - extracting main.c (Text)" 

sed 's/^X//' << 'SHAR_EOF' > main.c && 

Xmain() 

X{ 

X int yyparse(); 

X 

X return(yyparse()); 

X} 

SHAR_EOF 

chmod 0644 main.c || echo "restore of main.c fails" 

echo "x - extracting scan.l (Text)" 

sed 's/^X//' << 'SHAR_EOF' > scan.l && 

XD   [0-9] 

XL   [a-zA-Z_] 

XH   [a-fA-F0-9] 

XE   [Ee][+-]?{D}+ 

XFS   (f|F|l|L) 

XIS   (u|U|l|L)* 

X 

X%{ 

X#include <stdio.h> 

X#include "y.tab.h" 

X 

Xvoid count(); 

X%} 

X 

X%% 

X"/*"   { comment(); } 

X 

X"auto"   { count(); return(AUTO); } 

X"break"   { count(); return(BREAK); } 

X"case"   { count(); return(CASE); } 

X"char"   { count(); return(CHAR); } 

X"const"   { count(); return(CONST); } 

X"continue"  { count(); return(CONTINUE); } 

X"default"  { count(); return(DEFAULT); } 

X"do"   { count(); return(DO); } 

X"double"  { count(); return(DOUBLE); } 

X"else"   { count(); return(ELSE); } 

X"enum"   { count(); return(ENUM); } 

X"extern"  { count(); return(EXTERN); } 

X"float"   { count(); return(FLOAT); } 

X"for"   { count(); return(FOR); } 

X"goto"   { count(); return(GOTO); } 

X"if"   { count(); return(IF); } 

X"int"   { count(); return(INT); } 

X"long"   { count(); return(LONG); } 

X"register"  { count(); return(REGISTER); } 

X"return"  { count(); return(RETURN); } 

X"short"   { count(); return(SHORT); } 

X"signed"  { count(); return(SIGNED); } 

X"sizeof"  { count(); return(SIZEOF); } 

X"static"  { count(); return(STATIC); } 

X"struct"  { count(); return(STRUCT); } 

X"switch"  { count(); return(SWITCH); } 

X"typedef"  { count(); return(TYPEDEF); } 

X"union"   { count(); return(UNION); } 

X"unsigned"  { count(); return(UNSIGNED); } 

X"void"   { count(); return(VOID); } 

X"volatile"  { count(); return(VOLATILE); } 

X"while"   { count(); return(WHILE); } 

X 

X{L}({L}|{D})*  { count(); return(check_type()); } 

X 

X0[xX]{H}+{IS}?  { count(); return(CONSTANT); } 

X0[xX]{H}+{IS}?  { count(); return(CONSTANT); } 

X0{D}+{IS}?  { count(); return(CONSTANT); } 

X0{D}+{IS}?  { count(); return(CONSTANT); } 

X{D}+{IS}?  { count(); return(CONSTANT); } 

X{D}+{IS}?  { count(); return(CONSTANT); } 

X'(\\.|[^\\'])+'  { count(); return(CONSTANT); } 

X 

X{D}+{E}{FS}?  { count(); return(CONSTANT); } 

X{D}*"."{D}+({E})?{FS}? { count(); return(CONSTANT); } 

X{D}+"."{D}*({E})?{FS}? { count(); return(CONSTANT); } 

X 

X\"(\\.|[^\\"])*\" { count(); return(STRING_LITERAL); } 

X 

X">>="   { count(); return(RIGHT_ASSIGN); } 

X"<<="   { count(); return(LEFT_ASSIGN); } 

X"+="   { count(); return(ADD_ASSIGN); } 

X"-="   { count(); return(SUB_ASSIGN); } 

X"*="   { count(); return(MUL_ASSIGN); } 

X"/="   { count(); return(DIV_ASSIGN); } 

X"%="   { count(); return(MOD_ASSIGN); } 

X"&="   { count(); return(AND_ASSIGN); } 

X"^="   { count(); return(XOR_ASSIGN); } 

X"|="   { count(); return(OR_ASSIGN); } 

X">>"   { count(); return(RIGHT_OP); } 

X"<<"   { count(); return(LEFT_OP); } 

X"++"   { count(); return(INC_OP); } 

X"--"   { count(); return(DEC_OP); } 

X"->"   { count(); return(PTR_OP); } 

X"&&"   { count(); return(AND_OP); } 

X"||"   { count(); return(OR_OP); } 

X"<="   { count(); return(LE_OP); } 

X">="   { count(); return(GE_OP); } 

X"=="   { count(); return(EQ_OP); } 

X"!="   { count(); return(NE_OP); } 

X";"   { count(); return(';'); } 

X"{"   { count(); return('{'); } 

X"}"   { count(); return('}'); } 

X","   { count(); return(','); } 

X":"   { count(); return(':'); } 

X"="   { count(); return('='); } 

X"("   { count(); return('('); } 

X")"   { count(); return(')'); } 

X"["   { count(); return('['); } 

X"]"   { count(); return(']'); } 

X"."   { count(); return('.'); } 

X"&"   { count(); return('&'); } 

X"!"   { count(); return('!'); } 

X"~"   { count(); return('~'); } 

X"-"   { count(); return('-'); } 

X"+"   { count(); return('+'); } 

X"*"   { count(); return('*'); } 

X"/"   { count(); return('/'); } 

X"%"   { count(); return('%'); } 

X"<"   { count(); return('<'); } 

X">"   { count(); return('>'); } 

X"^"   { count(); return('^'); } 

X"|"   { count(); return('|'); } 

X"?"   { count(); return('?'); } 

X 

X[ \t\v\n\f]  { count(); } 

X.   { /* ignore bad characters */ } 

X 

X%% 

X 

Xyywrap() 

X{ 

X return(1); 

X} 

X 

Xcomment() 

X{ 

X char c, c1; 

X 

Xloop: 

X while ((c = input()) != '*' && c != 0) 

X  putchar(c); 

X 

X if ((c1 = input()) != '/' && c != 0) 

X { 

X  unput(c1); 

X  goto loop; 

X } 

X 

X if (c != 0) 

X  putchar(c1); 

X} 

X 

Xint column = 0; 

X 

Xvoid count() 

X{ 

X int i; 

X 

X for (i = 0; yytext[i] != '\0'; i++) 

X  if (yytext[i] == '\n') 

X   column = 0; 

X  else if (yytext[i] == '\t') 

X   column += 8 - (column % 8); 

X  else 

X   column++; 

X 

X ECHO; 

X} 

X 

Xint check_type() 

X{ 

X/* 

X* pseudo code --- this is what it should check 

X* 

X* if (yytext == type_name) 

X*  return(TYPE_NAME); 

X* 

X* return(IDENTIFIER); 

X*/ 

X 



X/* 

X* it actually will only return IDENTIFIER 

X*/ 

X 

X return(IDENTIFIER); 

X} 

SHAR_EOF 

chmod 0644 scan.l || echo "restore of scan.l fails" 

exit 0 

  

-- 

We work in the dark 

We do what we can 

We give what we have 

Our doubt is our passion, and our passion is our task 

The rest is the madness of art. 

⌨️ 快捷键说明

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