Écrire des expressions régulières pour les langages suivants:
Nous considérons l'expression régulière suivante qui décrit un ensemble de chaînes sur l'alphabet {a, b}:
(a*|b*)*a(a|b)(a|b)*
Construisez un analyseur lexical pour un sous-ensemble du langage C/C++ en utilisant Lex. L'analyseur doit être capable de compter le nombre d'identificateurs, de constantes (integer, float, double, scientific notation), de lignes, de définitions macro, de mots clés et de commentaires.Optionnellement (pour 5 points extra), l'analyseur devrait remplacer les noms de macros par leur définition macro (rencontrée précédemment).
Notes:
test < myinputfile
test > myoutputfile
test < myinputfile > myoutputfile
#define MacroName MacroValue
où macroName peut être une chaîne de lettres, chiffres et ponctuations, et Macrovalue peut être une chaîne, caractère, nombre ou ligne de texte. L'effet de la définition macro est l'association de la valeur avec le nom. Avant d'être compilé, le pré-processeur remplacera chaque occurrence de Macroname par la valeur associée. Par exemple,
#define PI 3.14159
#define MESSAGE “Hello, World.”
Cout << PI << endl;
Cout << MESSAGE << endl;
sera traduit par le pré-processeur en
Cout << 3,14159 << endl;
Cout << “Hello, World.” << endl;
bool, break, case, char, cin, class, const, continue, cout, do, double, else, endl, extern, false, float, for, goto, if, #include, int, long, main, namespace, new, public, return, short, sizeof, static, std, struct, switch, this, true, try, typedef, union, unsigned, using, void, while.
· String: a string constant is a sequence of zero or more characters enclosed in double quotes. E.g., “Hello, World.\n”.
· Character: a character constant is created by enclosing the character desired with single quotes (‘). E.g., ‘a’, ‘1’, ‘+’, ‘;’.
· Integer: the simpliest way to write an integer constant is to just write the number. E.g., 23, 45, 101, 55.
· Float: a float-point constant can be written in the following format.
- Scientific: a scientific notation is in the following format:
Pour d'autres informations sur C/C++, svp. référer à un livre sur ces langages. Voici un programme exemple:
// A sample C++ program
#include <iostream>
#include <string>
using namespace std;
#define PI 3.14159
#define MESSAGE “Hello, World.”
double main()
{
int x, y, sum;
cout << PI << endl;
cout << MESSAGE << endl;
cin >> x;
cin >> y;
sum = x + y;
cout << x << “ + ” << y << “ = “ << sum << endl;
cout << 230.E+3 << endl;
cout << 230E3 << endl;
cout 23000.0 << endl;
cout << 2.3e5 << endl;
cout 0.23E6 << endl;
cout << .23e+6 << endl;
return 0.;
}