Oui, je sais, la version 0.0 de R++ n'est pas censée exister... Elle vient pourtant d'être ajoutée. Elle n'a aucun intérêt, c'est juste pour amorcer la grammaire. C'est la même que la 0.1 sans les types récursifs, sans les "<-" ni les "[" et avec très peu d'opérations possibles.

1 Définition des token

1.1 Expressions régulières
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
letterMaj		[A-Z]
letterMin		[a-z]
letter			letterMaj | letterMin
digit			[0_9]
digit_not_nul		[1_9]
other			é | è | ç | à | ê | ù               // on complètera
ascii			letter |digit | other
1.2 Constantes typées
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
LIT_LOGICAL		TRUE | FALSE
LIT_INTEGER		("-"|"+")? (digitNotNul digit* | "0")
LIT_NUMERIC		LIT_INTEGER "." digit+ ("E" LIT_INTEGER)?
LIT_CHARACTER		QUOTE1 ascii* QUOTE1 | QUOTE2 ascii* QUOTE2 | QUOTE3 ascii* QUOTE3
LIT_VECTOR              "c"
LIT_SUITE               "suite"
LIT_LIST                "list"
LIT_TYPE_COMPOSE        LIT_VECTOR | LIT_SUITE | LIT_LIST

LOGICAL		TRUE | FALSE
INTEGER		("-"|"+")? (digitNotNul digit* | "0")
NUMERIC		INTEGER "." digit+ ("E" INTEGER)?
CHARACTER	QUOTE1 ascii* QUOTE1 | QUOTE2 ascii* QUOTE2
1.3 Les mots clefs du langage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
SET		set
GET		get
TYPE		type
IS_EQUAL	isEqual

Dans le formalisme du langage, les affectations seront possibles via 'set' ou via '<-'. Les acces se feront via 'get' ou en tapant simplement le nom de la variable. Ainsi, les lignes 1 et 2 sont rigoureusement identiques, idem pour les lignes 4 et 5 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
aze.set(3)
aze <- 3

aze.get()
aze
Question : spécifie-t-on dans la grammaire que les codes des lignes 2 et 5 sont acceptables, ou fait-on tourner un pré parseur qui ré écrit systématiquement les lignes 2 en lignes 1 et les lignes 5 en lignes 4 ?


1.4 Operateurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
PLUS		+
MULT		*
AND		AND
OR		OR
1.5 Identifiants
Code : Sélectionner tout - Visualiser dans une fenêtre à part
IDENTIFIANT	letter (letter|digit)*
1.6 Ponctuation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
COMMA		,
OPEN_PAR	(
CLOSE_PAR	)
DOT		.
QUOTE1		'
QUOTE2		"
2 Règles syntaxiques
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
prog 		-> stmt*
stmt 		-> <IDENTIFIANT> <DOT> method <OPEN_PAR> args? <CLOSE_PAR> 
method		-> <SET> | <GET> | <TYPE> | <IS_EQUAL>
args 		-> expression (<COMMA> expression)* 
expression 	-> expression2 (operateur expression2)*
expression2	-> <OPEN_PAR> expression <CLOSE_PAR> | value
value 		-> <LOGICAL> | <INTEGER> | <NUMERIC> | <CHARACTER> | <IDENTIFIANT>