Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
infosec-ecomp
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Putegnat Theo
infosec-ecomp
Commits
4c7b95cb
Commit
4c7b95cb
authored
5 years ago
by
Wilke Pierre
Browse files
Options
Downloads
Patches
Plain Diff
Update README.md
parent
80a4e0c7
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
alpaga/README.md
+19
-16
19 additions, 16 deletions
alpaga/README.md
with
19 additions
and
16 deletions
alpaga/README.md
+
19
−
16
View file @
4c7b95cb
...
...
@@ -6,10 +6,10 @@ Le format d'entrée (simple) est le suivant :
Premièrement, on définit les terminaux du langage :
'''
```
tokens SYM_EOF SYM_IF SYM_IDENTIFIER<string> SYM_INTEGER<int> SYM_PLUS SYM_MINUS
tokens SYM_ASTERISK SYM_DIV
'''
```
Les "SYM_XXX" correspondent aux symboles définis dans src/symbols.ml
...
...
@@ -18,41 +18,44 @@ caractères ou un entier, n indique son type entre chevrons < et >.
Ensuite, on définit les non-terminaux du langage :
'''
```
non-terminals S EXPR TERM FACTOR
non-terminals EXPRS TERMS
'''
```
Puis le non-terminal distingué qui sert d'axiome à la grammaire :
'''
```
axiom S
'''
```
Ensuite le mot clé 'rules' indique le début des règles de la grammaire
'''rules'''
```
rules
```
Une règle est simplement de la forme 'N -> SYM_TRUC AUTRE_NON_TERMINAL SYM_MACHIN'
Par exemple,
'''
```
S -> EXPR SYM_EOF
EXPR -> TERM EXPRS
EXPRS -> SYM_PLUS TERM EXPRS
EXPRS -> SYM_MINUS TERM EXPRS
EXPRS ->
'''
```
La dernière ligne de cette grammaire indique une règle qui produit le mot vide
(Epsilon) pour le non-terminal EXPRS.
Vous pouvez lancer ALPAGA avec la commande suivante :
'''
```
./ml_parser_generator -g <votre_fichier_de_grammaire.g> -t <table.html>
'''
```
Cela va analyser votre grammaire et produire un fichier HTML, que vous pouvez
ouvrir avec un navigateur web, et qui contient les tables Null, First et Follow
...
...
@@ -90,7 +93,7 @@ arbre de syntaxe abstraite. Pour ce faire, vous avez deux choses à faire :
Le code que vous écrivez correspond donc à la construction d'un terme OCaml.
Par exemple, le morceau suivant vous est fourni :
'''
```
S -> GLOBDEF SYM_EOF { Node (Tlistglobdef, [$1]) }
IDENTIFIER -> SYM_IDENTIFIER { StringLeaf ($1) }
INTEGER -> SYM_INTEGER { IntLeaf ($1) }
...
...
@@ -99,7 +102,7 @@ arbre de syntaxe abstraite. Pour ce faire, vous avez deux choses à faire :
let instr = $5 in
Node (Tfundef, [$1; Node (Tfunargs, fargs) ; instr ])
}
'''
```
Pour une règle X -> w1 w2 ... wn, les variables $i correspondent aux actions
générées par le symbole wi. Par exemple, dans l'action de la première règle,
...
...
@@ -109,9 +112,9 @@ arbre de syntaxe abstraite. Pour ce faire, vous avez deux choses à faire :
Ces actions vont servir à générer le parser, ce qui se fera avec la commande :
'''
./ml_parser_generator -g
<votre_fichier_de_grammaire.g>
-t
<table.html>
-pml
<generated_parser.ml>
'''
```
./ml_parser_generator -g <votre_fichier_de_grammaire.g> -t <table.html> -pml <generated_parser.ml>
```
ce qui créera le fichier
<generated_parser.ml>
à l'endroit où vous l'avez
indiqué.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment