فهرست منبع

worked on Lex and Yacc.

Jayke Meijer 14 سال پیش
والد
کامیت
c14e76cf7f
3فایلهای تغییر یافته به همراه11 افزوده شده و 7 حذف شده
  1. 1 1
      src/Makefile
  2. 7 5
      src/lex.l
  3. 3 1
      src/lex_out.y

+ 1 - 1
src/Makefile

@@ -3,7 +3,7 @@ LEX=lex
 YACC=yacc
 YACC=yacc
 CFLAGS=-ll
 CFLAGS=-ll
 
 
-parser: lex yacc
+parser: yacc lex
 	$(CC) -c lex.yy.c y.tab.c
 	$(CC) -c lex.yy.c y.tab.c
 	$(CC) -o $@ lex.yy.o y.tab.o $(CFLAGS)
 	$(CC) -o $@ lex.yy.o y.tab.o $(CFLAGS)
 
 

+ 7 - 5
src/lex.l

@@ -2,15 +2,17 @@
 #include <stdio.h>
 #include <stdio.h>
 #include "y.tab.h"
 #include "y.tab.h"
 %}
 %}
+arg \$[a-zA-Z0-9\.]+
 
 
 %%
 %%
 
 
-[a-z0-9$._]+:       { yylval.sval = yytext; return LABEL; }      /* Label */
-\$[a-z0-9._]        { yylval.sval = yytext; return ARG; }        /* Arg of instr */
-^[a-z.]+            { yylval.sval = yytext; return INSTR; }      /* Instruction */
+#[^\n]*             { yylval.sval = yytext; return COMMENT; }    /* Comment */
+[a-zA-Z0-9$\.]+:   { yylval.sval = yytext; return LABEL; }      /* Label */
+{arg}               { yylval.sval = yytext; return ARG; }        /* Arg of instr */
+[0-9]+(\({arg}\))?  { yylval.sval = yytext; return ARG; }        /* Arg of instr */
 \.[^\n]*            { yylval.sval = yytext; return DIRECTIVE; }  /* Assembly */
 \.[^\n]*            { yylval.sval = yytext; return DIRECTIVE; }  /* Assembly */
+[a-z\.]+            { yylval.sval = yytext; return INSTR; }      /* Instruction */
 [,]                 { return COMMA; }                       /* Comma */
 [,]                 { return COMMA; }                       /* Comma */
-#[^\n]*             { yylval.sval = yytext; return COMMENT; }    /* Comment */
 [\n]                { return NL; }                          /* New line */
 [\n]                { return NL; }                          /* New line */
 	
 	
-[\s\t]+             { ; }                              /* Ignore whitespace */
+[ \t]+             { ; }                            /* Ignore whitespace */

+ 3 - 1
src/lex_out.y

@@ -17,8 +17,10 @@ void yyerror(char*);
 %token <sval> COMMENT
 %token <sval> COMMENT
 
 
 %%
 %%
+
 symb:
 symb:
-    LABEL {printf("Found a label: %s\n", $1);}
+    symb symb
+    | LABEL {printf("Found a label: %s\n", $1);}
     | ARG {printf("Found an argument: %s\n", $1);}
     | ARG {printf("Found an argument: %s\n", $1);}
     | INSTR {printf("Found an instruction: %s\n", $1);}
     | INSTR {printf("Found an instruction: %s\n", $1);}
     | DIRECTIVE {printf("Found a directive: %s\n", $1);}
     | DIRECTIVE {printf("Found a directive: %s\n", $1);}