Bonjour à tous !

Je recherche actuellement des infos sur la programmation de parsers en Java.

Je vous explique rapidement ce que je recherche et j'espère que certains d'entres vous auront des pistes ou des idées pour m'aider ...

je suis en train de réaliser une interface détachée d'un programme (qui s'appelle FDS) dont je n'ai pas le code source. FDS utilise des fichiers textes pour communiquer des data entre ses différents modules. J'aimerai pouvoir lire ces fichiers afin "d'alimenter" mon interface avec les bonnes data.

Par la suite, afin de lancer les actions, je pourrais utiliser un pilotage en mode batch de FDS à partir de mon interface en envoyant des commandes sur un terminal. (à voir plus tard, je ne sais pas encore comment faire...)

Le problème est que ce programme génère des fichiers qui sont formatés mais pas comme d'habitude (xml ou autre).

Voici à quoi ressemble par exemple ces fichiers :

process.txt

#INPUT
range = {
bound = {
min <FDS:ZDON(1)> = "500" ~km
max <FDS:ZDON(2)> = "250" ~km
}
phasisMaxError <FDS:ZDON(3)> = "5" ~km
}
stationBias <FDS:ZDON(4)> = "90." ~deg
altitude <FDS:ZDON(5)> = "1800.47E+00" ~km
...
et ça continue sur plusieurs pages... chaque ligne servant à quelque chose ...
et bien sur pour compliquer (un peu) le truc, il y a 4 ou 5 fichiers différents à analyser...


J'ai essayé de programmer mon parser directement en JAVA, je ne m'en sors pas...
j'ai essayé d'utiliser des solutions telles que CUP / JFlex ... je continue de travailler sur ça à essayer de comprendre comment faire, mais j'ai peur d'etre dans une impasse ...

j'aimerai avoir, en sortie, un objet (que je suis en train de créer), imaginons

Parameter avec comme attributs: Name et Value.

Et je créerai des instances de cet objet pour avoir par example, pour les premières lignes de mon fichier:

Parameter RangeBoudMin = new Parameter(RangeBoundMin, 500);
Parameter RangeBoundMax = new Parameter(RangeBoundMax, 250);
Parameter RangePhasisMaxError = new Parameter(RangePhasisMaxError, 5);
Parameter StationBias = new Parameter(StationBias, 90.);
Parameter Altitude = new Parameter(Altitude, 1800.47E+00);

voilà cet objet (public) aura pour but d'être réutilisé dans le code de mon interface par des textfields. J'utiliserai alors l'attribue Value de mon objet pour remplir la valeur du bon textfield.

Pour l'instant je ne me sers pas de l'attribut Name, mais plus tard je pourrais ajouter les attribut Unité, numéroZDON ...

J'espère avoir été clair dans mes explications, n'hésite pas à me demander plus de précision si nécessaire!!


Voici un extrait de l'interface que j'utilise:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
public class newInterface extends ViewPart {
 
	public static final String ID = "newInterface";
	private Text text;
	private Text text_1;
 
	public newInterface() {
	}
 
	/**
         * Create contents of the view part.
         * @param parent
         */
	@Override
	public void createPartControl(Composite parent) {
		Composite container = new Composite(parent, SWT.NONE);
		container.setLayout(new GridLayout(2, false));
		{
			Label lblNewLabel = new Label(container, SWT.NONE);
			lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
			lblNewLabel.setText("Range Bound Min");
		}
		{
			text = new Text(container, SWT.BORDER);
			text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		}
		{
			Label lblNewLabel_1 = new Label(container, SWT.NONE);
			lblNewLabel_1.setText("Range Bound Max");
		}
		{
			text_1 = new Text(container, SWT.BORDER);
			text_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
		}
 
		createActions();
		initializeToolBar();
		initializeMenu();
	}
 
	/**
         * Create the actions.
         */
	private void createActions() {
		// Create the actions
	}
 
	/**
         * Initialize the toolbar.
         */
	private void initializeToolBar() {
		IToolBarManager toolbarManager = getViewSite().getActionBars()
				.getToolBarManager();
	}
 
	/**
         * Initialize the menu.
         */
	private void initializeMenu() {
		IMenuManager menuManager = getViewSite().getActionBars()
				.getMenuManager();
	}
 
	@Override
	public void setFocus() {
		// Set the focus
	}
 
}


j'ai commencé à écrire ça pour le parser:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
protected void processLine(String aLine){
	    Pattern regexp = Pattern.compile("^[a-zA-Z]*? <[\\w:\\(\\)]*?> = \"([0-9]*?)\" .*$");
	    Matcher matcher = regexp.matcher(aLine);	    
	    System.out.println(matcher.group(1));
	  }
Mais j'obtiens une erreur...

Je vous remercie d'avance pour votre aide

Sarah