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

📄 demo.fpl

📁 类PASCAL语言的编译器,LINUX环境的,我没试过是否正确.
💻 FPL
字号:
/*************************************************************************** **   $Filename: demo.FPL $ **   $Release: 13.2 $ **   $Date: 95/07/23 $ ** **   (C) Copyright 1992 - 1995 by FrexxWare **       All Rights Reserved****************************************************************************     >>>>>> Frexx Programming Language (FPL) demonstration program <<<<<<			   Author: Daniel Stenberg.**************************************************************************** FPL is an interpreting, library based programming language designed to be flexible and easy to insert in any software that needs some kind of batch/macro control. FPL is a complete programming language very similar to C. (Just look at this program example!) FPL.library lets the software programmer define functions that FPL should accept. The library will call a function in the software whenever any of these functions are discovered. In this example, the printf() function is a such function. To be able to run this example you must use the "src/SFPL" program. (Look at the code in caller.c and see how simple it is to implement.) This example is working with FPL version 9+. FPL is freely distributable for non-commercial purposes only, including extensive documentation and source code. *************************************************************************** * * Prototype all function we'll use: */#pragma cache /* pragma using little example! */void strings();void integers();void mix_them();void arrays();int expressions();void conditions();void loops();void constants();void locals();void recursive();void functions();export void arg_functions(); /* make this global system-wide */typedef long LONG; /* good old Commodore habit! */LONG label(int);LONG test(int);LONG setvar(int *);LONG printint(int);LONG double2(int a) /* declare before use instead of prototype! */{  return a*2;  // with or without parentheses!}int ninja=1;export int ninjax=0;auto loop;/*************************************************************************** * * Main program part coming up: */do {  strings();	// How to use strings.  integers();	// How to use integers.  mix_them();	// How to mix strings and integers.  arrays();	// How to use arrays.  //expressions();// How to write expressions.  conditions();	// How to check conditions.  loops();	// How to loop.  constants();	// How to write constants.  locals();	// How to use local variables.  recursive();	// How to recurse.  functions();	// How to use the functions.  arg_functions(); // How to send parameters to your own functions.} while(loop++<10);exit;/*************************************************************************** * * Here follows a subroutine featuring some of the string expression * facilities that FPL includes: */void strings(){  string a;				/* declaration of a string   */  string b="Written ";			/* declaration and assign    */  string c[2];				/* string array declaration  */  string d="\x65\157";			/* hexadecimal + octal ASCII */  a="bb";				/* string variable assign    */  a[1]='y';				/* single character access!  */  b+=a;					/* string appending          */  c[0]={"Daniel",        "Stenberg"};			/* array assigning           */  printf("%s %s %s ", b, c[0], c[1]);	/* display result            */}/*************************************************************************** * * Here follows a subroutine featuring some of the integer handlings that * can be done: */void integers(){  int a;				/* integer declaration 		*/  int b=200;				/* declaration assign 		*/  int c[2]={-25, 1234};			/* array declaration and assign */  a=10;					/* integer variable assign      */  c[0]+={2019, 758};			/* compound array assign	*/  printf("%d - %d!\n", c[1], c[0]);	/* display the contents of c[0-1] */}/*************************************************************************** * * Numerical expressions can be converted to strings by using ltostr() or * itoa().  */void mix_them(){  string a="Copyright ", c;		/* two string variables */  int b;				/* one integer variable */  b=a[0];				/* get ASCII code of column 2 */  printf("%s%s by ", a, ltostr(b*97+30+022, 16));  /* display result */}/*************************************************************************** * * FPL supports multi dimensional arrays (max 40 dimensions though): */void arrays(){  int c[5][2]={    {2, 0},    {3, 1}  };  int a[25]={0, 1, 2, 3, 4, 5, 6};	/* declaration assign    */  string b[4];  a[12]^={3, 2, 1, 0};			/* array compound assign */  resize a[10];				/* array resizing        */  output(b[0]={"FPL", "is", "Copyright by", "FrexxWare!"});  output("\n");}/*************************************************************************** * * Expressions are very extensible in FPL. It features all ANSI C operators * and has 100% operator precedence compatibility: */int expressions(){  int a=128, b=3, c, d;  string out;  c=~(a>>b)+2*b-a++/50 & (d=a*2-1); 	/* complex formula */  c^= (2^3&3+a)%c;			/* compound assign */  output(d = c---a-b*10);		/* output integer! */  output("% ");				/* output string! */  return d;}/*************************************************************************** * * Conditions are used just as i C. */void conditions(){  int a=11;  switch( expressions() ) {    case 99:      output("Turbo pascal");      break;    case 100:      output("ANSI C");    default:      output(" operator ");         }  if(a==11)    output("compliance!\n");  else    output("failure!\n");}/*************************************************************************** * * Loops are used just as in C. (While has been improved with else support * and break with a level option!): */void loops(){  int a, b;  for(a=0; a<10; a++) {    int Bninja;    output("-");    b=a;    while(b<5)      b++;    else {      output("Very "		/* Strings in         */	     "easy"		/* several parts      */	     " implemented, "); /* just as in C!      */	/* This upper thing is a 5.3+ feature! */      break;			/* break out of loop! */    }  }  do {    if(++b<10)      continue;    break;  } while(a);  while(1)    while(1)      while(1)        while(1)          while(1) {	    output("very similar to C.\n");	    break 5;/* break out of multiple loops! */	  }}/*************************************************************************** * * Constants can be written in several different ways in FPL: */void constants(){  int a= 010 +	  /* octal number		*/         0b100 +  /* binary number		*/         0xdead - /* hexadecimal number		*/         211 +	  /* common decimal number	*/         'A'+	  /* ASCII code			*/         '\t';	  /* ASCII code of control char	*/}/*************************************************************************** * * Variables always exist in their declared level and in the following ones * execpt when new variables are declared there with the same name: */void locals(){  int a=2, b=11;	/* declare a and b here */  {    int a=3;		/* declare a here */    {      int a=4;		/* declare a here */      {        int a=5;	/* declare a here */        test(b);	/* jump to test and come back */      }			/* this removes one a variable */    }			/* this removes another a variable */  }			/* this removes yet another a variable */  printf("%d kinds of comments, ", a);	/* this is the original variable */}int test(int b){  printf("FPL features %d internal functions\n",  b);}/*************************************************************************** * * FPL is fully recursive: */void recursive()/* This example shows the recursiveness by using a lot of */		/* unnecessary braces and from within the innermost brace */		/* level call itself. */{  int b;  label(0);}int label(int b){  int a;  if(++b<5) {    while(1) {      {        {          {            {              {                label(b);                break;	      }            }          }        }      }    }  } else    printf("Finally we reached this point when b equals %d.\n", 2<<b);}/*************************************************************************** * * FPL supplies several internal functions: */void functions(){  int a, b=2, c;  string str1="hello", str2="world", str3="l", num="12";  a=strcmp(str1, str2);		/* compare two strings */  a=strncmp(str1, str2, b);	/* compare two strings a certain length */  a=strstr(str2, str3);		/* search for substring within a big string */  str3=substr(str1, 0, 3);	/* get substring */  a=atoi(num);			/* decimal string to numerical */  a=strtol(num, 16);		/* any-base string to numerical */  str3=ltostr(a, 14);		/* integer to string, base 14 */  num+="-19";			/* append to string */  c=eval(num);			/* calculate a string!!! */  a=strlen(str2);		/* length of a string */				/* absolute value of integer: */  printf("abs(%s) equals %d.\n", num, abs(c));}void arg_functions(){  long a;  // supports `long', which is the same as `int'  for(a=0; a<5; a++)    printint(double2(a)); // `inside' functions used as any other function!  setvar(&a);	// assign variable a!  printint(a);  // to prove it really changed!  printint((++ninjax, ninja++)); /* Using comma separator in functions that				    only wants one parameter! */  output("\n");}int setvar(int *variable) // integer variable as argument{  *variable=100; // assigns the received variable!}int printint(int x) // integer as argument{  printf("|%d|", x); // output the numer received!}/***************************************************************************		    >Copyright (C) 1992 - 1994 by FrexxWare<****************************************************************************/

⌨️ 快捷键说明

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