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

📄 pascal语法.c

📁 语言的语法,格式严紧,对于处理yacc,lex有帮助!
💻 C
📖 第 1 页 / 共 2 页
字号:
发信人: InfoMagic (好好学习 天天向上), 信区: PUE 

标  题: pascal 语法 

发信站: 武汉白云黄鹤站 (2001年05月23日22:57:09 星期三), 站内信件 

  

#! /bin/sh 

# This is a shell archive, meaning: 

# 1. Remove everything above the #! /bin/sh line. 

# 2. Save the resulting text in a file. 

# 3. Execute the file with /bin/sh (not csh) to create: 

# ident-list 

# makefile 

# misc.c 

# mktoken_name 

# pascal.l 

# pascal.y 

# types.h 

# This archive created: Thu Nov 26 22:10:37 1987 

export PATH; PATH=/bin:/usr/bin:$PATH 

echo shar: "extracting 'ident-list'" '(1162 characters)' 

if test -f 'ident-list' 

then 

 echo shar: "will not over-write existing file 'ident-list'" 

else 

sed 's/^ X//' << \SHAR_EOF > 'ident-list' 

 X#!/bin/sh 

 X# 

 X# ident-list [-s] <program> 

 X# 

 Xtmp1=/tmp/a$$X 

 Xtmp2=/tmp/a$$Y 

 Xsflag="$1" 

 Xif [ "x$sflag" = "x-s" ] 

 Xthen shift 

 Xfi 

 X 

 Xcat $* | extract-ids >$tmp1 

 Xif [ "x$sflag" = "x-s" ] 

 Xthen 

 X sed -e '/^program/d 

 X/^field/d 

 X/^external-file/d 

 Xs/^conformant-bound/parameter/ 

 Xs/^procedure-parameter/parameter/ 

 Xs/^function-parameter/parameter/ 

 Xs/^var-parameter/parameter/ 

 Xs/^value-parameter/parameter/ 

 Xs/^enumerated-literal/constant/' <$tmp1 >$tmp2 

 X mv $tmp2 $tmp1 

 Xfi 

 Xsort -uf +0 -1 +1 -2 <$tmp1 | 

 Xawk ' 

 Xfunc tabulate(title,n) { 

 X columns = int(pagewidth/(maxlen+3)); 

 X colwidth = int(pagewidth/columns); 

 X rows = int((n+columns-1)/columns); 

 X format = sprintf("%%-%ds", colwidth); 

 X for(i=1;i<=rows; i++) 

 X { 

 X     printf "%-19s| ", title; title="" 

 X     for(j=0; j<columns; j++) 

 X     { 

 X  x = i + j*rows 

 X  if(x<=n)printf(format, s[x]); 

 X     } 

 X     print "" 

 X } 

 X print "" 

 X} 

 X 

 XBEGIN { itemtype="";  pagewidth=59 

 Xbar="---------------------------------------------------------------"} 

 X{ 

 X if($1 != itemtype) 

 X { 

 X  if(n>0)  tabulate(itemtype,n) 

 X  itemtype = $1; n=0; maxlen=0; 

 X } 

 X s[++n] = $2;  len = length($2);  if(len>maxlen)maxlen=len; 

 X} 

 XEND { if(n>0)  tabulate(itemtype,n) }' 

 X 

 Xrm -f $tmp1 

SHAR_EOF 

if test 1162 -ne "`wc -c < 'ident-list'`" 

then 

 echo shar: "error transmitting 'ident-list'" '(should have been 1162 charac 

ters)' 

fi 

fi 

echo shar: "extracting 'makefile'" '(557 characters)' 

if test -f 'makefile' 

then 

 echo shar: "will not over-write existing file 'makefile'" 

else 

sed 's/^ X//' << \SHAR_EOF > 'makefile' 

 XOBJECTS = y.tab.o misc.o lex.yy.o token_name.o 

 X 

 X# 

 Xall:  extract-ids 

 Xextract-ids: $(OBJECTS) 

 X  cc -o extract-ids $(OBJECTS) -ly -ll 

 Xy.tab.c y.tab.h: pascal.y 

 X  yacc -vd pascal.y 

 Xlex.yy.c: pascal.l 

 X  lex pascal.l 

 Xlex.yy.o: tokens.h 

 Xtokens.h: y.tab.h 

 X  -cmp -s y.tab.h tokens.h || cp y.tab.h tokens.h 

 Xtoken_name.c: mktoken_name tokens.h 

 X  sh mktoken_name 

 X 

 Xinstall: extract-ids 

 X  if [ -d "$(BIN)" ] ; then cp extract-ids ident-list $(BIN)/ ; \ 

 X        chmod 755 $(BIN)/extract-ids $(BIN)/ident-list ; fi 

 X 

 Xclean: 

 X  rm -f *.o lex.yy.c y.* token_name.c tokens.h 

SHAR_EOF 

if test 557 -ne "`wc -c < 'makefile'`" 

then 

 echo shar: "error transmitting 'makefile'" '(should have been 557 character 

s)' 

fi 

fi 

echo shar: "extracting 'misc.c'" '(253 characters)' 

if test -f 'misc.c' 

then 

 echo shar: "will not over-write existing file 'misc.c'" 

else 

sed 's/^ X//' << \SHAR_EOF > 'misc.c' 

 X#include <stdio.h> 

 X 

 X 

 Xchar  *create_string(s) 

 Xchar *s; 

 X{ 

 X    char *p = (char *) malloc(strlen(s) + 1); 

 X    if(p==NULL) internal_error("Cannot malloc in create-string"); 

 X    strcpy(p,s); 

 X    return p; 

 X} 

 X 

 Xint max(a,b) 

 Xint a,b; 

 X{ 

 X    return  a>b ? a : b; 

 X} 

SHAR_EOF 

if test 253 -ne "`wc -c < 'misc.c'`" 

then 

 echo shar: "error transmitting 'misc.c'" '(should have been 253 characters) 

' 

fi 

fi 

echo shar: "extracting 'mktoken_name'" '(465 characters)' 

if test -f 'mktoken_name' 

then 

 echo shar: "will not over-write existing file 'mktoken_name'" 

else 

sed 's/^ X//' << \SHAR_EOF > 'mktoken_name' 

 X#!/bin/sh 

 X# 

 X# Make a symbol name 

 X# 

 X( 

 Xecho 'char *token_name(i) 

 Xint i; 

 X{ 

 X    static char buf[10]; 

 X    switch(i) 

 X    { 

 X default  : if(i<256) 

 X     { 

 X         if(i<32 || i>126) 

 X      sprintf(buf, "0%o", i); 

 X         else 

 X             sprintf(buf, "'%c'", i); 

 X         return buf; 

 X     } 

 X     else 

 X         return("<Unknown token>"); 

 X case   0 : return("<End of input>");' 

 Xawk '{printf" case %d : return(\"%s\");\n",  $4, $3}' < y.tab.h 

 Xecho '    } 

 X}' 

 X)  > token_name.c 

SHAR_EOF 

if test 465 -ne "`wc -c < 'mktoken_name'`" 

then 

 echo shar: "error transmitting 'mktoken_name'" '(should have been 465 chara 

cters)' 

fi 

fi 

echo shar: "extracting 'pascal.l'" '(3817 characters)' 

if test -f 'pascal.l' 

then 

 echo shar: "will not over-write existing file 'pascal.l'" 

else 

sed 's/^ X//' << \SHAR_EOF > 'pascal.l' 

 X%{ 

 X/************************************************************************* 

***** 

 X  LEXICAL ANALYSER for ISO standard Pascal 

 X  ---------------------------------------- 

 X 

 XThis lexical analyser satisfies the following requirements in British 

 XStandards Institution Specification for Computer programming language Pasc 

al 

 XBS6192:1982 (ISO 7185:1983) 

 X 

 X6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.1.6 6.1.7 

 X6.1.8 (except ^Z is considered to be a space) 

 X6.1.9 

 X************************************************************************** 

****/ 

 X 

 X#include "y.tab.h" 

 Xint character_no = -1; 

 X 

 X#undef input 

 X#undef unput 

 Xint  input() 

 X{ 

 X    if(yysptr > yysbuf) 

 X    { 

 X yytchar = U(*--yysptr); 

 X    } else 

 X yytchar = getc(yyin); 

 X    character_no++; 

 X    if(yytchar == 10)  yylineno ++; 

 X    if(yytchar == 0)   yytchar= ' '; 

 X    if(yytchar == EOF) yytchar= 0; 

 X    return yytchar; 

 X} 

 X 

 Xunput(c) 

 Xint c; 

 X{ 

 X    yytchar = c; 

 X    if (yytchar == '\n') yylineno--; 

 X    *yysptr++ = yytchar; 

 X    character_no--; 

 X} 

 X 

 Xcomment() 

 X{ 

 X    char c, lastc=' '; 

 X    while(c = yyinput()) 

 X if(c == '}' || (lastc=='*' && c==')')) 

 X     break; 

 X        else 

 X     lastc = c; 

 X} 

 X 

 Xchar *laststring; 

 Xstrings() 

 X{ 

 X    char  *create_string(); 

 X    char  buf[256]; 

 X    char  c, *p = buf; 

 X    while(c = yyinput()) 

 X        switch(c) { 

 X     case '\'' : if((c = yyinput()) == '\'') 

 X       *p++ = c; 

 X   else 

 X   {   unput(c); *p++ = '\0'; 

 X       laststring = create_string(buf); 

 X       return; 

 X   } 

 X   break; 

 X     case '\n' : 

 X     case '\014' : 

 X     case '\015': yyerror("String not terminated"); 

 X   return; 

 X     default   : *p++ = c; 

 X   break; 

 X } 

 X} 

 X 

 Xchar numbertext[80]; 

 Xchar    lastident[128]; 

 X 

 X%} 

 X 

 XA [Aa] 

 XB [Bb] 

 XC [Cc] 

 XD [Dd] 

 XE [Ee] 

 XF [Ff] 

 XG [Gg] 

 XH [Hh] 

 XI [Ii] 

 XJ [Jj] 

 XK [Kk] 

 XL [Ll] 

 XM [Mm] 

 XN [Nn] 

 XO [Oo] 

 XP [Pp] 

 XQ [Qq] 

 XR [Rr] 

 XS [Ss] 

 XT [Tt] 

 XU [Uu] 

 XV [Vv] 

 XW [Ww] 

 XX [Xx] 

 XY [Yy] 

 XZ [Zz] 

 X%% 

 X\n    ; 

 X[ \t\32]   ; 

 X{A}{N}{D}   { return(AND);  } 

 X{A}{R}{R}{A}{Y}   { return(ARRAY); } 

 X{B}{E}{G}{I}{N}   { return(SBEGIN); } 

 X{C}{A}{S}{E}   { return(CASE);  } 

 X{C}{O}{N}{S}{T}   { return(CONST); } 

 X{D}{I}{V}   { return(DIV);  } 

 X{D}{O}{W}{N}{T}{O}  { return(DOWNTO); } 

 X{D}{O}    { return(DO);  } 

 X{E}{L}{S}{E}   { return(ELSE);  } 

 X{E}{N}{D}   { return(END);  } 

 X{F}{I}{L}{E}   { return(SFILE); } 

 X{F}{O}{R}   { return(FOR);  } 

 X{F}{U}{N}{C}{T}{I}{O}{N} { return(FUNCTION); } 

 X{G}{O}{T}{O}   { return(GOTO);  } 

 X{I}{F}    { return(IF);  } 

 X{I}{N}    { return(IN);  } 

 X{L}{A}{B}{E}{L}   { return(LABEL); } 

 X{M}{O}{D}   { return(MOD);  } 

 X{N}{I}{L}   { return(NIL);  } 

 X{N}{O}{T}   { return(NOT);  } 

 X{O}{F}    { return(OF);  } 

 X{O}{R}    { return(OR);  } 

 X{P}{A}{C}{K}{E}{D}  { return(PACKED); } 

 X{P}{R}{O}{C}{E}{D}{U}{R}{E} { return(PROCEDURE); } 

 X{P}{R}{O}{G}{R}{A}{M}  { return(PROGRAM); } 

 X{R}{E}{C}{O}{R}{D}  { return(RECORD); } 

 X{R}{E}{P}{E}{A}{T}  { return(REPEAT); } 

 X{S}{E}{T}   { return(SET);  } 

 X{T}{H}{E}{N}   { return(THEN);  } 

 X{T}{O}    { return(TO);  } 

 X{T}{Y}{P}{E}   { return(TYPE);  } 

 X{U}{N}{T}{I}{L}   { return(UNTIL); } 

 X{V}{A}{R}   { return(VAR);  } 

 X{W}{H}{I}{L}{E}   { return(WHILE); } 

 X{W}{I}{T}{H}   { return(WITH);  } 

 X 

 X[a-zA-Z][a-zA-Z0-9_]*  { strcpy(lastident, yytext); 

 X      return(IDENTIFIER); 

 X      /*if strict check no '_' */} 

 X"<="    { return(LE); } 

 X">="    { return(GE); } 

 X"<>"    { return(NE); } 

 X":="    { return(BECOMES); } 

 X".."    { return(DOTDOT); } 

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

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

 X"-" | 

 X"+" | 

 X"*" | 

 X"/" | 

 X"=" | 

 X"<" | 

 X">" | 

 X"(" | 

 X")" | 

 X"[" | 

 X"]" | 

 X"." | 

 X"," | 

 X";" | 

 X":" | 

 X"^" { return(yytext[0]); } 

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

 X[0-9]+("."[0-9]+)?[eE][+-]?[0-9]+ | 

 X[0-9]+"."[0-9]+    { strcpy(numbertext,yytext); 

 X       return(UNSIGNED_REAL); } 

 X[0-9]+ { strcpy(numbertext,yytext); return(UNSIGNED_INT); } 

 X 

 X"{" comment(); 

 X"(*" comment(); 

 X' { strings(); return(STRING); } 

 X"}" yyerror("'}' not in comment"); 

 X. { char m[40]; 

 X   sprintf(m,"Illegal character '\\%o'", (int)yytext[0]); 

 X   yyerror(m); 

 X } 

SHAR_EOF 

if test 3817 -ne "`wc -c < 'pascal.l'`" 

then 

 echo shar: "error transmitting 'pascal.l'" '(should have been 3817 characte 

rs)' 

fi 

fi 

echo shar: "extracting 'pascal.y'" '(7510 characters)' 

if test -f 'pascal.y' 

then 

 echo shar: "will not over-write existing file 'pascal.y'" 

else 

sed 's/^ X//' << \SHAR_EOF > 'pascal.y' 

 X%{ 

 X#include <stdio.h> 

 X#include "types.h" 

 X 

 Xextern int yylineno; 

⌨️ 快捷键说明

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