Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- //---------------------------------------------
- // João Barros 2016241579
- // Ricardo Paiva 2016253100
- //---------------------------------------------
- #include<stdio.h>
- int nlines=1;
- int linha_aux=0, coluna_aux=0;
- int ncolunas=1;
- int semicolon=0;
- char* string;
- int ver_erro = 0;
- %}
- %x COMENTARIO ASPAS COMENTARIO_LINHA
- reserved "default"|"++"|"--"|"select"|"go"|"struct"|"chan"|"goto"|"break"|"interface"|"case"|"defer"|"map"|"switch"|"const"|"fallthrough"|"range"|"type"|"continue"|"import"
- numero [0-9]+
- exp "e"|"E"
- sinal "-"|"+"
- letra [a-zA-Z_][0-9_a-zA-Z]*
- reallit ([0-9]+"."([0-9]+)?(("e"|"E")("-"|"+")?[0-9]+)?)|("."[0-9]+(("e"|"E")("-"|"+")?[0-9]+)?)|([0-9]+("e"|"E")("-"|"+")?[0-9]+)
- intlit [0-9]+|[0-9]*(0x|0X)[0-9a-fA-F]+|0[0-7]+
- escape \\t|\\n|\\r|\\f|\\\\|\\\"
- it_linha "\n"|"\r"|"\r\n"
- %%
- "//" {BEGIN COMENTARIO_LINHA; linha_aux=nlines;coluna_aux=ncolunas;ncolunas+=yyleng;}
- <COMENTARIO_LINHA>{it_linha} {BEGIN 0; nlines++; ncolunas=1;if(semicolon == 1){printf("SEMICOLON\n");semicolon=0;};}
- <COMENTARIO_LINHA>. {ncolunas+=yyleng;}
- "/*" {BEGIN COMENTARIO;linha_aux=nlines;coluna_aux=ncolunas;ncolunas+=yyleng;}
- <COMENTARIO><<EOF>> {BEGIN 0;printf("Line %d, column %d: unterminated comment\n", linha_aux, coluna_aux);}
- <COMENTARIO>"*/" {BEGIN 0; ncolunas+=yyleng;}
- <COMENTARIO>{it_linha} {ncolunas=1;nlines++;}
- <COMENTARIO>. {ncolunas+=yyleng;}
- \" {BEGIN ASPAS;linha_aux=nlines;coluna_aux=ncolunas;ncolunas+=yyleng;string =yytext;}
- <ASPAS>\" {BEGIN 0;ncolunas+=yyleng;if(ver_erro == 0){printf("STRLIT(%s)\n", string);semicolon=1;};ver_erro=0;coluna_aux=0;}
- <ASPAS>{escape} {ncolunas+=yyleng;}
- <ASPAS>\\.? {printf("Line %d, column %d: invalid escape sequence (%s)\n", linha_aux, ncolunas, yytext);ver_erro=1;ncolunas+=yyleng;}
- <ASPAS>{it_linha} {BEGIN 0;printf("Line %d, column %d: unterminated string literal\n", linha_aux, coluna_aux);nlines++;ver_erro=0;ncolunas=1;semicolon=0;}
- <ASPAS><<EOF>> {BEGIN 0; printf("Line %d, column %d: unterminated string literal\n", linha_aux, coluna_aux);ver_erro=0; semicolon=0; return 0;}
- <ASPAS>. {ncolunas+=yyleng;}
- "package" {printf("PACKAGE\n");ncolunas+=yyleng;semicolon=0;}
- ";" {printf("SEMICOLON\n");semicolon=0;ncolunas+=yyleng;}
- "_" {printf("BLANKID\n");ncolunas+=yyleng;semicolon=0;}
- "return" {printf("RETURN\n");semicolon=1;ncolunas+=yyleng;}
- "&&" {printf("AND\n");ncolunas+=yyleng;semicolon=0;}
- "=" {printf("ASSIGN\n");ncolunas+=yyleng;semicolon=0;}
- "*" {printf("STAR\n");ncolunas+=yyleng;semicolon=0;}
- "," {printf("COMMA\n");ncolunas+=yyleng;semicolon=0;}
- "/" {printf("DIV\n");ncolunas+=yyleng;semicolon=0;}
- "==" {printf("EQ\n");ncolunas+=yyleng;semicolon=0;}
- ">" {printf("GT\n");ncolunas+=yyleng;semicolon=0;}
- ">=" {printf("GE\n");ncolunas+=yyleng;semicolon=0;}
- "{" {printf("LBRACE\n");semicolon=0;ncolunas+=yyleng;}
- "<=" {printf("LE\n");ncolunas+=yyleng;semicolon=0;}
- "(" {printf("LPAR\n");ncolunas+=yyleng;semicolon=0;}
- "[" {printf("LSQ\n");ncolunas+=yyleng;semicolon=0;}
- "<" {printf("LT\n");ncolunas+=yyleng;semicolon=0;}
- "-" {printf("MINUS\n");semicolon=0;ncolunas+=yyleng;}
- "%" {printf("MOD\n");ncolunas+=yyleng;semicolon=0;}
- "!=" {printf("NE\n");ncolunas+=yyleng;semicolon=0;}
- "!" {printf("NOT\n");ncolunas+=yyleng;semicolon=0;}
- "||" {printf("OR\n");ncolunas+=yyleng;semicolon=0;}
- "+" {printf("PLUS\n");semicolon=0;ncolunas+=yyleng;}
- "}" {printf("RBRACE\n");semicolon=1;ncolunas+=yyleng;}
- ")" {printf("RPAR\n");semicolon=1;ncolunas+=yyleng;}
- "]" {printf("RSQ\n");semicolon=1;ncolunas+=yyleng;}
- "else" {printf("ELSE\n");ncolunas+=yyleng;semicolon=0;}
- "for" {printf("FOR\n");ncolunas+=yyleng;semicolon=0;}
- "if" {printf("IF\n");ncolunas+=yyleng;semicolon=0;}
- "var" {printf("VAR\n");semicolon=0;ncolunas+=yyleng;}
- "int" {printf("INT\n");semicolon=0;ncolunas+=yyleng;}
- "float32" {printf("FLOAT32\n");ncolunas+=yyleng;semicolon=0;}
- "bool" {printf("BOOL\n");ncolunas+=yyleng;semicolon=0;}
- "string" {printf("STRING\n");ncolunas+=yyleng;semicolon=0;}
- "fmt.Println" {printf("PRINT\n");ncolunas+=yyleng;semicolon=0;}
- "strconv.Atoi" {printf("PARSEINT\n");ncolunas+=yyleng;semicolon=0;}
- "func" {printf("FUNC\n");ncolunas+=yyleng;semicolon=0;}
- "os.Args" {printf("CMDARGS\n");ncolunas+=yyleng;semicolon=0;}
- {reserved} {printf("RESERVED(%s)\n",yytext); semicolon=0;ncolunas+=yyleng;}
- {intlit} {printf("INTLIT(%s)\n", yytext);semicolon=1;ncolunas+=yyleng;}
- {reallit} {printf("REALLIT(%s)\n", yytext);semicolon=1;ncolunas+=yyleng;}
- {letra} {printf("ID(%s)\n", yytext);semicolon=1;ncolunas+=yyleng;}
- {it_linha} {ncolunas=1;nlines++;if(semicolon == 1 && ver_erro==0){printf("SEMICOLON\n");semicolon=0;};ver_erro=0;}
- <<EOF>> {return 0;}
- \t|\f|" " {ncolunas+=yyleng;}
- . {printf("Line %d, column %d: illegal character (%s)\n", nlines, ncolunas, yytext); ncolunas+=yyleng;}
- %%
- int main()
- {
- yylex();
- return 0;
- }
- int yywrap()
- {
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement