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

📄 tcl.pars

📁 这是一个Linux下的集成开发环境
💻 PARS
字号:
/* $Id: tcl.pars,v 1.1.1.1 2002/04/18 23:42:10 mdejong Exp $ */PARSEREXPORT {# include <stdio.h>extern int	tcl80, itcl, itcl15;extern FILE *	yyin		;extern FILE *	hlfp		;extern int	hl		;extern char *	current_file	;extern void start_parser ARGS ((char * fname, int parse_cplpl, FILE * highl_fp, int highlight));}GLOBAL {#include <stdlib.h>#include "Tree.h"#include "Position.h"#include "Eval.h"#include "Trafo.h"#include "itcl.h"# define fprintf(x,y)extern	FILE *	cross_ref_fp	;	int	tcl80, itcl, itcl15;	FILE *	yyin		;	FILE *	hlfp		;	int	hl		;	char *	current_file	;static	rbool	is_initialized	= rfalse;static	rbool	report		= rfalse;static	rbool	graphic		= rfalse;static	tIdent	i_lparent, i_rparent;static	int	dialect		;static void get_options ARGS ((void)){   char * arg = getenv ("PAF_TCL");   if (arg == NULL) return;   while (* arg) {      if (* arg == '-') {	 switch (* ++ arg) {	 case 'f': report = rtrue; break;	 case 'g': graphic = rtrue; break;	 case 'h':	    (void) printf ("\nsyntax of PAF_TCL:\n\n");	    (void) printf ("   [-f] [-h]\n\n");	    (void) printf (" f : report error messages (default: do not report)\n");	    (void) printf (" h : help\n\n");	    break;	 }      }      arg ++;   }}void start_parser (fname, parse_cplpl, highl_fp, highlight)   char	*	fname;   int		parse_cplpl;   FILE	*	highl_fp;   int		highlight;{   current_file = fname;   hlfp         = highl_fp;   hl           = highlight;   tcl80 = itcl = itcl15 = 0;   if (! is_initialized) { get_options (); is_initialized = rtrue; }   StoreMessages	(rtrue);   InitStringMemory	();   InitIdents		();   if (fname) Attribute.Position.FileName = MakeIdent (fname, strlen (fname));   else       Attribute.Position.FileName = NoIdent;   BeginFile		("");   Beginitcl		();   BeginTrafo		();   (void) Parser	();   /* CheckTree		(TreeRoot); */   Eval			(TreeRoot);   itcl += itcl15;   if (itcl > 0 && tcl80 > 0)   			{ Interpret_tcl (TreeRoot); fprintf (stderr, "???\n"); }   else if (tcl80 > 0)	{ Interpret_tcl (TreeRoot); fprintf (stderr, "tcl\n"); }   else if (itcl > 0) {        if (itcl15 > 0) { Interpret_itcl (TreeRoot); fprintf (stderr, "itcl15\n"); }	else		{ Interpret_itcl (TreeRoot); fprintf (stderr, "itcl22\n"); }   } else		{ Interpret_tcl (TreeRoot); fprintf (stderr, "zero\n"); }# ifdef DRAWTREE   if (graphic) DrawTree (TreeRoot);# endif   if (report) WriteMessages (stderr);   CloseStringMemory	();   ReleaseTreeModule	();}# define SHARE# ifdef DRAWTREE# undef SHARE# endif# ifdef SHAREstatic tTree		snostmt, snoword, snotext;# define dnostmt	snostmt# define dnoword	snoword# define dnotext	snotext# else# define dnostmt	mnostmt ()# define dnoword	mnoword ()# define dnotext	mnotext ()# endif}BEGIN {   BeginScanner ();   i_lparent		= MakeIdent ("(" , 1);   i_rparent		= MakeIdent (")" , 1);# ifdef SHARE   snostmt		= mnostmt ();   snoword		= mnoword ();   snotext		= mnotext ();# endif}PROPERTY INPUTRULEprogram		= statements		{ => TreeRoot = mprogram (statements:tree); } .statements	= <		=		{ tree := dnostmt; } .		= statement statements		{ tree := Mstmt (statements:tree, statement:tree); } .		= end statements .> .statement	= <		= words end		{ tree := ReverseTree (words:tree); } .		= space words end		{ tree := ReverseTree (words:tree); } .> .words		= <		= word		{ tree := Mword (dnoword, word:tree); } .		= words space word		{ tree := Mword (words:tree, word:tree); } .> .word		= <		= qualification .		= ')'		{ tree := mone_word (NoTree, i_rparent, ')':Position); } .		= word qualification		{ tree := mone_qualification (Mqualification (word:tree),			qualification:tree); } .		= word ')' .				/* we forget ')' */> .qualification	= <		= local_qualification .		= local_qualification '(' .		/* we forget '(' */		= local_qualification '(' qualification		{ tree := msubscription ('(':Position,			local_qualification:tree, qualification:tree); } .		= local_qualification '(' qualification ')'		{ tree := msubscription ('(':Position,			local_qualification:tree, qualification:tree); } .		= global_qualification .		= global_qualification '(' .		/* we forget '(' */		= global_qualification '(' qualification		{ tree := msubscription ('(':Position,			global_qualification:tree, qualification:tree); } .		= global_qualification '(' qualification ')'		{ tree := msubscription ('(':Position,			global_qualification:tree, qualification:tree); } .		= '::'		{ tree := mglobal_ident ('::':Position, NoIdent); } .		= '::' '('		{ tree := mglobal_ident ('(':Position, i_lparent); } .		= '::' '(' qualification		{ tree := msubscription ('(':Position, mglobal_ident			('::':Position, NoIdent), qualification:tree); } .		= '::' '(' qualification ')'		{ tree := msubscription ('(':Position, mglobal_ident			('::':Position, NoIdent), qualification:tree); } .		= '('		{ tree := mlocal_ident ('(':Position, i_lparent); } .		= '(' qualification .			/* we forget '(' */		= '(' qualification ')' .	/* we forget '(' and ')' */> .local_qualification	= <		= fragments		{ tree := fragments:is_simple ?			mlocal_ident (fragments:tree->text.pos,			   make_one_word (fragments:tree)) :			mlocal_text (fragments:tree->text.pos,			   fragments:tree); } .		= local_qualification '::' fragments		{ tree := fragments:is_simple ?			mqualification (fragments:tree->text.pos,			   local_qualification:tree, make_one_word (fragments:tree)) :			mcomplex_qual (fragments:tree->text.pos,			   local_qualification:tree, fragments:tree); } .		= local_qualification '::' .		/* we forget '::' */> .global_qualification	= <		= '::' fragments		{ tree := fragments:is_simple ?			mglobal_ident (fragments:tree->text.pos, make_one_word (fragments:tree)) :			mglobal_text (fragments:tree->text.pos, fragments:tree); } .		= global_qualification '::' fragments		{ tree := fragments:is_simple ?			mqualification (fragments:tree->text.pos,			   global_qualification:tree, make_one_word (fragments:tree)) :			mcomplex_qual (fragments:tree->text.pos,			   global_qualification:tree, fragments:tree); } .		= global_qualification '::' .		/* we forget '::' */> .fragments	= <		= fragment		{ tree := { tree = fragment:tree; tree->text.next = dnotext; }; } .		= fragment fragments		{ tree := { tree = fragment:tree; tree->text.next = fragments:tree; };		  is_simple := fragment:is_simple & fragments:is_simple; } .> .fragment	= <		= '$'		{ tree := mcharacter (NoTree, '$':Position, '$');		  is_simple := rtrue; } .		= character		{ tree := mcharacter (NoTree, character:Position, character:text);		  is_simple := rtrue; } .		= ident		{ tree := mident (NoTree, ident:Position, ident:ident);		  is_simple := rtrue; } .		= '"(' statements '")'		{ tree := mblock (NoTree, '"(':Position, '")':Position, statements:tree, '"');		  is_simple := rfalse; } .		= '[' statements ']'		{ tree := mblock (NoTree, '[':Position, ']':Position, statements:tree, '[');		  is_simple := rfalse; } .		= '{' statements '}'		{ tree := mblock (NoTree, '{':Position, '}':Position, statements:tree, '{');		  is_simple := rfalse; } .		= '$' '{' statements '}'		{ tree := Mblock_content ('$':Position, '}':Position, statements:tree);		  is_simple := rfalse; } .		= '$' variable		{ tree := mcontent (NoTree, '$':Position, variable:tree);		  is_simple := rfalse; } .		= '$' '::'		{ tree := mcharacter (NoTree, '$':Position, '$');		  is_simple := rtrue; } .		/* we forget '::' */> .variable	= <		= simple_local_qual .		= simple_local_qual '(' .		/* we forget '(' */		= simple_local_qual '(' qualification		{ tree := msubscription ('(':Position, simple_local_qual:tree,			qualification: tree); } .		= simple_local_qual '(' qualification ')'		{ tree := msubscription ('(':Position, simple_local_qual:tree,			qualification: tree); } .		= simple_global_qual .		= simple_global_qual '(' .		/* we forget '(' */		= simple_global_qual '(' qualification		{ tree := msubscription ('(':Position, simple_global_qual:tree,			qualification: tree); } .		= simple_global_qual '(' qualification ')'		{ tree := msubscription ('(':Position, simple_global_qual:tree,			qualification: tree); } .> .simple_local_qual	= <		= ident		{ tree := mlocal_ident (ident:Position, ident:ident); } .		= simple_local_qual '::' ident		{ tree := mqualification (ident:Position,			simple_local_qual:tree, ident:ident); } .		= simple_local_qual '::' .		/* we forget '::' */> .simple_global_qual	= <		= '::' ident		{ tree := mglobal_ident (ident:Position, ident:ident); } .		= simple_global_qual '::' ident		{ tree := mqualification (ident:Position,			simple_global_qual:tree, ident:ident); } .		= simple_global_qual '::' .		/* we forget '::' */> .end		= <		= "EOF" .		= space "EOF" .		= end_of_command .		= space end_of_command .> .ident		: [ident: tIdent] { ident := NoIdent	; } .character	: [text : char	] { text  := '?'	; } .MODULE treeDECLARE   statements   statement   words   word   qualification   local_qualification   global_qualification   fragments   fragment   simple_local_qual   simple_global_qual   variable		= [tree		: tTree] .   fragments   fragment		= [is_simple	: rbool] .END tree

⌨️ 快捷键说明

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