%option 8bit yylineno noyywrap stack
%{
#include <iostream>
%}
%x X_PT_PT X_PT_BR X_IGNORE
%%
	      BEGIN(X_PT_PT);	/* initial state */

<*>"<<"			yy_push_state(X_IGNORE);
<X_IGNORE>">>"		yy_pop_state();
<X_IGNORE>.|\n		;  /* ignore */

<*>"<<pt_BR>>"		BEGIN(X_PT_BR);
<*>"<<pt_PT>>"		BEGIN(X_PT_PT);

	/* exceptions: european portuguese */
<X_PT_PT>{
  "facto"		ECHO;
  "sumptuoso"		ECHO;
}

	/* excepções: brazilian portuguese */
<X_PT_BR>{
  "aspecto"		ECHO;
  "recepção"		ECHO;
}

	/* rewrite rules for all variants */
<*>{
  "êe"			std::cout << "ee";
  "ôo"			std::cout << "oo";
  [gq]"ü"[eiê]		yytext[1] = 'u'; ECHO;
  [cp][cçt]		std::cout << (yytext+1);
  mp[cçt]		yytext[1] = 'n'; std::cout << (yytext+1);

  "auto-r"		std::cout << "autorr";
  "auto-s"		std::cout << "autoss";

  .|\n			ECHO;
}

%%
int main() { return yylex(); }
