Informations sur: Parser

Publié par Freem le 24/12/2006

Description

Code source est a améliorer pour le parser. Le constructeur s'occupe des commandes. Je sais que ce n'est pas recommandé, mais je l'ai fait pour démarrer. Il faudra juste travailler la classe après.

Code source (langage cpp)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
class CChaine
{
public:
void Enchainer(int);
unsigned int Lire(int);
};
//a travailler, c'etait juste pour l'exemple.
 
#include <string.h>
#define NBINST 10
#define MAXCAR 30
 
typedef struct
{
	char chaine[MAXCAR];
	void *verSyntaxe;
	void *traducteur;
}Commande;
 
class indexMots : public CChaine
{
	public:
		unsigned long i;
};
 
class Parser
{
	public:
		char *source;
		unsigned long lenSource;
	protected:
	private:
		Commande liste[NBINST]; 
		unsigned long nbLignes;
		unsigned short nbVar, nbFonc;
		indexMots index;
		
 
	public:
	void main(void);
		Parser(void);
		~Parser(void);
	protected:
	private:
};
 
void Parser::main(void)
{
	char *mot=0;
	unsigned long cpt, ligne, debutMot=0, tmp;
	
	index.Enchainer(0);
	for(cpt=0;cpt<lenSource;cpt++)
	{
		while(source[cpt]!='\\"')
		{cpt++;}
		if(!strcpy(source+cpt,"REM ") || source[cpt]!='\\'')
		{
			while(source[cpt]!='\\n')
				{cpt++;}
		}
		if(source[cpt]=='\\n')
		{
			nbLignes++;
			index.Enchainer(cpt);
		}
	}
	//compte le nombres de lignes de code
	
	for(ligne=0;ligne<nbLignes;ligne++)
	{
		cpt=index.Lire(ligne);
		do
		{
			debutMot=cpt;
			do{cpt++;}
			while(source[cpt]!=' ' && source[cpt]!='\\\\');
			if(mot)
				delete mot;
			mot=new char[cpt-debutMot];
			strncpy(mot,source+debutMot,cpt-debutMot);
			/*lit un mot (qu'il faudra probablement débarrasser
			 des blancs non significatifs, s'il y en a...)*/
			for(tmp=0;tmp<(unsigned)(NBINST+nbVar+nbFonc);tmp++)
			{
				/*il va falloir chainer les instructions,
				 fonctions et variables dans la meme liste*/
				if(!strcmp(mot,liste[tmp].chaine))
				{
					(liste[tmp].verSyntaxe)(); //execute la fonction qui vérifie la syntaxe et le nombre d'arguments
					break;
				}
			}
		}while(cpt<index.Lire(ligne+1));
	}
}
v6 © Computaid SPRL 2005-2008 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,096 s - Crédits - Stats
1 connecté