snxc/字句解析(snxc.l)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[SN/X付属コンパイラの解読]]
*字句解析(snxc.l) [#v99087a0]
lexによる字句解析を行うためのプログラムです。
----
#contents
**include文とプロトタイプ宣言 [#s2d7f469]
%{
#include <stdlib.h>
#include "snxc.h"
#include "y.tab.h"
void yyerror(char *s);
%}
**字句解析メイン [#vb0c1323]
%%
[a-z] {
yylval.Symbol = *yytext - 'a';
return VARIABLE;
}
[0-9]+ {
yylval.IntVal = atoi(yytext);
return INTEGER;
}
[-()<>=+*/;{}.\[\]] {
return *yytext;
}
"++" return PP;
"--" return MM;
">=" return GE;
"<=" return LE;
"==" return EQ;
"!=" return NE;
"for" return FOR;
"while" return WHILE;
"if" return IF;
"else" return ELSE;
"return" return RETURN;
"print" return PRINT;
"mem" return MEM;
"io" return IO;
"arg" return ARG;
"lo" return LO;
"void" return DEF;
"int" return DEF;
"foo" return FUNCNAME;
"halt" return HALT;
[ \t\n]+ ; /* ignore whitespace */
. yyerror("Unknown character");
%%
int yywrap(void) {
return 1;
}
lexは与えられたテキスト(ここではC言語風のプログラム)を先頭から解析して、~
プログラムが解析しやすいように、その文字に対応しているコード(VARIABLE, INTEGERなど)に置き換えていきます。
終了行:
[[SN/X付属コンパイラの解読]]
*字句解析(snxc.l) [#v99087a0]
lexによる字句解析を行うためのプログラムです。
----
#contents
**include文とプロトタイプ宣言 [#s2d7f469]
%{
#include <stdlib.h>
#include "snxc.h"
#include "y.tab.h"
void yyerror(char *s);
%}
**字句解析メイン [#vb0c1323]
%%
[a-z] {
yylval.Symbol = *yytext - 'a';
return VARIABLE;
}
[0-9]+ {
yylval.IntVal = atoi(yytext);
return INTEGER;
}
[-()<>=+*/;{}.\[\]] {
return *yytext;
}
"++" return PP;
"--" return MM;
">=" return GE;
"<=" return LE;
"==" return EQ;
"!=" return NE;
"for" return FOR;
"while" return WHILE;
"if" return IF;
"else" return ELSE;
"return" return RETURN;
"print" return PRINT;
"mem" return MEM;
"io" return IO;
"arg" return ARG;
"lo" return LO;
"void" return DEF;
"int" return DEF;
"foo" return FUNCNAME;
"halt" return HALT;
[ \t\n]+ ; /* ignore whitespace */
. yyerror("Unknown character");
%%
int yywrap(void) {
return 1;
}
lexは与えられたテキスト(ここではC言語風のプログラム)を先頭から解析して、~
プログラムが解析しやすいように、その文字に対応しているコード(VARIABLE, INTEGERなど)に置き換えていきます。
ページ名: