Bonjour,

Je ne sais pas si c'est le bon forum où mais je vais tenter :p J'avais déjà posté sur le forum C# et sur stackoverflow mais pas de réponse.

J'aimerais parser ce type de contenu (shader q3):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
textures/liquids/lava-example
{
    deformVertexes wave sin 0 3 0 0.1
    q3map_tessSize 64
    surfaceparm lava
    qer_editorimage textures/common/lava.tga
    {
        map textures/common/lava.tga
    } 
}
En gros, la structure est:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
shadername
{
    directive
    directive
    //....
    {
        directive
        //...
    } 
}
J'aurais savoir comment définir une règle principale pour une directive (avec une clé et des paramètres) puis de définir à part toutes les possibilités.

J'ai réussi à faire cette grammaire (qui fonctionne pour mes qlq tests):
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
parser grammar ShaderParser;

options {
  tokenVocab=ShaderLexer; 
}

shaderlist
    : shader+
    ;

shader
    : shadername LBracket directive* stage* RBracket
    ;

shadername
    : Path CompileTime?
    ;

stage
    : LBracket directive* RBracket
    ;

directive
    : key parameter?
    | key DQuote parameter DQuote
    | key SQuote parameter SQuote
    ;

key
    : Word
    ;

parameter
    : Word 
    | Integer 
    | Double
    | Path      ;
Pour l'instant j'ai une directive qui correspond à une clé et un paramètre parce que je vois pas comment faire ce dont je vous ai parlé.

Merci pour votre aide!