、ス、、ス、イソ、ォス、ウ、ヲ、ネサラ、テ、ソ、ホ、ヌス、、、ネ、ュ、゙、ケ。」
、ェサミ、オ、。ヨ、ェサミ、オ、、ネ。シ。ラ
サウタキッ。ヨサウタキッ、ホ。シ。ラ
ニアサ。ヨILogScript、ロ、イ、ロ、イ、ハ、、ネ、ォケヨコツ。シ。ラ
--
サウタキッ : ノ眛フ、ホタトヌッ。」コヌカ皃マ。ヨ・・テ・チ・ッ・鬣、・「・・ネ。ラ、ネ、ォクタ、テ、ニ、。」・・テ・チ・ッ・鬣、・「・・ネ、テ、ニイソ、陦」
、ェサミ、オ、 : ・「・、ハタ゚ト熙ホ、ェサミ、オ、
--
、ェサミ、オ、。ヨサウタキッ、マILogScript、テ、ニテホ、テ、ニ、、ォ、ハ。シ。ゥ。ラ
サウタキッ。ヨテホ、熙゙、サ、。ェ。ェ。ラ
、ェサミ、オ、。ヨ、゙、「。「、ス、、筅キ、ォ、ソ、ハ、、、ォ。ト、ク、网「。「・ウ・・ム・、・鬢ス、ュ、ソ、、。「、ネサラ、テ、ソ、ウ、ネ、マ、「、、ォ、ハ。シ。ゥ。ラ
サウタキッ。ヨフオ、、、ヌ、ケ、テ。ェ。ェ。ラ
、ェサミ、オ、。ヨ、ス、、タ、ネ。「マテ、ャソハ、゙、ハ、、、ク、网ハ、、。」、ウ、ホシチフ荀マ。「[Y/y]、゚、ソ、、、ハエカ、ク、タ、ネサラ、テ、ニハヨサ、キ、ニ、陦」。ラ
サウタキッ。ヨ、ス、ウ、ヌ。「^C。ラ
、ェサミ、オ、。ヨケ、、・テ。ラ
--
、ェサミ、オ、。ヨ、ネ。「、、、ヲ、、ア、ヌ。「、ウ、、ォ、鬘「ILogScript、ホ・チ・蝪シ・ネ・・「・、テ、ン、、タ篶タ、、キ、隍ヲ、ォ、ネサラ、、、゙、ケ。」。ラ
サウタキッ。ヨ、マ、、、テ。ェ、メ、ネ、ト、、、、、ヌ、ケ、ォ。ラ
、ェサミ、オ、。ヨ、マ、、、テ。ェ、ハ、、ヌ、キ、遉ヲ。ェ。ゥシチフ荀キ、隍ヲ、ネ、ケ、、ウ、ネ、茖「ーユクォ、クタ、ェ、ヲ、ネ、ケ、サムタェ、マネセ、ヒノセイチ、ヌ、ュ、゙、ケ、陦ェ。ェ。ラ
サウタキッ。ヨ、ウ、ヲ、、、ヲノ、ヒタ篶タハク、イマテキチシー、ヒ、ケ、、ネ。「 ・ヘ・テ・ネ・。シ・ッ、ホク、ウ、ヲツヲ、ヌ"、ヲ、。シ、ウ、。「・ェ・ソ、ャス、、、ソハク、タ、陦ト・ュ・筵テ"、ネ、ォクタ、テ、ニ・メ、ュ、゙、ッ、、ネ、、、ヲ、隍ヲ、ハ 、ス、ヲ、、、ヲソヘ、ホ・、・癸シ・ク、ャ、「、熙「、熙ネノ筅ォ、、ヌ、ッ、、、ヌ、ケ、ャ。「、ス、ホキ、ヒ、ト、、、ニ、マ。「、ノ、ヲツミア、ケ、、ミ、隍、、ヌ、キ、遉ヲ、ォ・テ。ゥ。ラ
、ェサミ、オ、。ヨ、「。シ。ト、ィ。シ。ト。ラ
--
、ネ。「、゙、「。「、ス、ホキ、ヒ、ト、、、ニ、ハ、、タ、ア、ノ。「、ウ、ホフ萃熙マネセ、ヒニ、キ、、フ萃熙ヌ、「、テ、ニ。「 ホ网ィ、ミ。「・ウ・・ム・、・鬢ホ、ウ、ネ、。「・ウ・。ヲ・ム・、・鮃ッ、ネ、ォクニ、、ク、网テ、ソ、熙キ、ニ、ニ、筍「 ース、ヒフセチー、マ「、ヘ、、ホ、オ、キ、チ、网ヲ。「、゚、ソ、、、ハ。「、ス、ヲ、、、ヲ・サ・・ケ、ヘイ、ヌ、ュ、、タ、ア、ホツ遉ュ、ハエ、サ、テ、ニ、、、ハ、、、ネ ホゥヌノ、ハ・ウ・・ム・、・鬢ホタ霏ク、ヒ、マ、ハ、、ハ、、、、タ、セ。」、ネ、、、ヲ、ス、ヲ、、、ヲフ萃熙簇アサ、ヒエ゙、、ヌ、、ホ、ヌ、「、。」 ・ウ・・ム・、・鮨、ュ、ネ、、、ヲ、ホ、マ。「、ス、ヲ、、、ヲノハャ、簣ラオ皃オ、、、ホ、タ。」ツソハャ。」
todo: ・「・、ハウィ、ニ、、
--
、ネ。「、、、ヲ、ホ、マ。「、「、、゙、ヒワハク、ネ、マエリキクフオ、、、ネ、キ、ニ。「 、ウ、ホILogScript・チ・蝪シ・ネ・・「・、ヌ、マ。「・ウ・・ム・、・鬢シツコン、ヒシツチ、キ、ハ、ャ、鬘「ILogScript、ヒ、ト、、、ニタ篶タ、キ、ニ、、、ッ。」
、「、ネ。「wo、マDOS、゙、、熙ホキ、ヒ、ト、、、ニ、マ。「シツコン、ヒクォ、ソ、ウ、ネ、マフオ、、。「、ネ、、、ヲ、ホ、簗萃ュ、キ、ニ、ェ、ッ。」ーア。」
、゙、コ、マ。「、ノ、ヲ、、、ヲクタク、、ト、ッ、、ォ、ケヘ、ィ、、ウ、ネ、ヒ、ケ、。」イソ、ヌ、筅、、、、、タ、ア、ノ。「 、、、ッ、ト、ォエヒワナェ、ハヘラチヌ、エ゙、皃ト、ト。「エハテア、ハエカ、ク、ヌ、、、ュ、ソ、、、隍ヘ、ァ。ト、ネ。「、、、ヲ、ウ、ネ、ヌ。「 シ。、ホ、筅ホ、エ゙、、タクタク、ヒ、ケ、
、、ヌ。「、ウ、、鬢。「C、゚、ソ、、、ハケスハク・ケ・ソ・、・、ホセ螟ヒセ隍テ、ア、、ウ、ネ、ヒ、ケ、。」 ・、・癸シ・ク、ネ、キ、ニ、マ。「、ウ、、ハエカ、ク
int x = 4; int y = 5; int z = x + y * 5;
、ウ、ヲ、、、ヲ、ウ、ネ、ャ、ヌ、ュ、。「、ネ。」 、「、ネ、マ。「セキハャエ、荀鬘「エリソクニ、モスミ、キ、荀鬢ニ、、ハ、、、ネ。「キラササ、キ、ソ、ネ、ウ、、ヌ キイフ、ャサネ、ィ、ハ、、、ォ、鬢ノ、ヲ、キ、隍ヲ、筅ハ、、、、タ、ア、ノ。「、ネ、熙「、ィ、コ。「、ス、、マ、゙、ソシ。イ、ネ、、、ヲ、ウ、ネ、ヌ。」。ハ、、、ト、ヒ、ハ、、ォ、、ォ、鬢、ャ。ヒ
、ヌ。「、ネ、熙「、ィ、コ。「、ウ、ホクタク、EBNF、゚、ソ、、、ハ、ホ、ヌス、、、ネ、ッ、ネ。「
program ::= (decl_stmt | expr_stmt)*
// expr
expr_stmt == expr ';'
expr ::= plus_expr
plus_expr ::= plus_expr '+' mult_expr |
plus_expr '-' mult_expr
mult_expr ::= mult_expr '*' term |
mult_expr '/' term
term ::= digit | ident | '(' expr ')'
// decl
decl_stmt ::= 'int' ident ('=' expr)? ';'
// token
ident ::= [_a-zA-Z][_a-zA-Z0-9]*
digit ::= [0-9]+
、ウ、、ハエカ、ク。」
。ハヘスト:、タ、鬢タ、鬢ネケスハクフレ、ホマテ、ネ、ォ。ヒ
、オ、ニ。「、ウ、テ、ォ、鬢ャヒワネヨ。」ILogScript、サネ、テ、ニ・「・サ・・ヨ・熙タクタョ、ケ、、ネ、ウ、、゙、ヌ、ホマテ、。」 、「、ネ。「GCC、ホニ篷ケスツ、、ホハルカッ、ヒ、篏ネ、ィ、。ト、ォ、筅キ、、ハ、、。」
、隍ッ、ヌ、ュ、ソハクセマ、ネー网テ、ニ。「・ワ・ネ・爭「・テ・ラハシー、ヌス、、、ニ、、、テ、ニ、、ホ、ヌ。「ニノ、゚、ヒ、ッ、、、ォ、筅キ、、ハ、、。」 ニノ、゚、ヒ、ッ、、、ネエカ、ク、ソソヘ、マ。「ーネヨコヌク螟ホハクサ、ォ、魴ユハク、ヒニノ、、ヌ、、、テ、ソ、 ・ネ・テ・ラ・タ・ヲ・ナェ、ヒニノ、皃ソ、熙キ、ニ、、、、、、ク、网ハ、、、ォ、ハ。シ。」、ネ。」。ハトカナャナ。ヒ
、ヌ、マ。「、゙、コ。「エハテア、ハシー、ホケスハクフレ、ホコ、熙ォ、ソ、ヒ、ト、、、ニ、ホマテ。」
、ヌ。「、ウ、ウ、ヌ、マ。「マテ、エハテア、ヒ、ケ、、ソ、皃ヒ。「・ラ・・ー・鬣爭ウ。シ・ノ、 ヌセニ筍「、ェ、隍モシ熙ヌケスハクフレ、リ、ネハムエケ、キ、ニ、゚、、ウ、ネ、ヒ、ケ、。」 ・マ・・ノ・「・サ・・ヨ・、ハ、鬢フ。「・マ・・ノ・ム。シ・ケ、ネクタ、テ、ソ、ネ、ウ、、ォ。」クマ、、ャーュ、、。」
--
、゙、コ。「エハテア、ハシー、ケヘ、ィ、。」
1 + 2
、ウ、、ハ、ホ。」トソ、ネトソ、ホイテササ。」、ウ、、ケスハクフレ、ヒ、ケ、、ネ。「
。ハヘスト:ゾス、ュトセ、ケ。ヒ
+
/ \
/ \
1 2
、ウ、、ハエカ、ク。」、゙、「。「クォ、ソ、゙、、゙、ネ、、、ヲ、ォ。」
、、ヌ。「、ウ、、ホフレ、ノス、ケ・ヌ。シ・ソ、ILogScript、ヌコ、テ、ニ、゚、、ウ、ネ、ヒ、ケ、。」、ス、、ャ。「シ。、ホ・ラ・・ー・鬣爍」
// 1 + 2 var expr = gcc.build( gcc.PLUS_EXPR, types.integer_type_node, 1, 2 );
buildエリソ、ャケスハクフレ、コ、エリソ。」、ウ、、クニ、モスミ、キ、ニケスハクフレ、コ、。」
ウニーソ、ホーユフ」、マシ。、ホ、ネ、ェ、遙」
、ウ、、ハエカ、ク。」。ヨコクハユテヘ、ャ1。「アヲハユテヘ、ャ2、ホintキソ、ホPLUS_EXPR。ラ、ネ、、、ヲーユフ」。」
integer_type_node、ネ、、、ヲ、ホ、マ。「intキソ、ホ、ウ、ネ、ネサラ、テ、ニ、、、ソ、タ、、、ニ、、、、、ォ、ネ。」
、ヌ。「PLUS_EXPR、ネ、、、ヲ、ホ、マ。「イテササシー、ホ、ウ、ネ。」クコササ、ホMINUS_EXPR。「セ霆サ、ホMULT_EXPR。「 、ス、ホツセソァ。ケ、ハ、ノ、ャ、「、。」、ノ、ヲ、、、ヲ、ホ、ャ、「、、ォ、ヒ、ト、、、ニ、マ。「GCC・ス。シ・ケニ筅ホtree.defサイセネ。」
--
、゙、「。「、ネ、熙「、ィ、コ。「ケスハクフレ、マbuildエリソ、サネ、テ、ニコ、。「、ネ。」 、ヌ。「コ、テ、ソケスハクフレ、ウホヌァ、ケ、、ヒ、マ。「debug_treeエリソ、サネ、ヲ。」
var expr = gcc.build( gcc.PLUS_EXPR, types.integer_type_node, 1, 2 ); debug_tree( expr );
、ウ。シ、ケ、、ネ。「
<plus_expr 87ef18
type <integer_type 84aaf0 SI
size <integer_cst 848558 constant 32>
unit size <integer_cst 848600 constant 4>
align 32 symtab 0 alias set -1 precision 32 min <integer_cst 8485d0 -2147483648> max <integer_cst 8485e8 2147483647>
pointer_to_this <pointer_type 84fa10>>
constant
arg 0 <integer_cst 87eaf8 type <integer_type 84aaf0> constant 1>
arg 1 <integer_cst 87eb28 type <integer_type 84aaf0> constant 2>>
テ讀「、ソ、熙ホ、エ、チ、网エ、チ、网キ、ソ、ネ、ウ、、マネエ、、、ニ、筅鬢テ、ニ。「
<plus_expr
constant
arg 0 <integer_cst constant 1>
arg 1 <integer_cst constant 2>>
、ウ、、ハエカ、ク。」integer_cst 、ネ、、、ヲ、ホ、マ。「ターソトソ、ホ、ウ、ネ。」arg0 = 1 、ホ arg1 = 2 、ホplus_expr、テ、ニ、ハ、テ、ニ、、ホ、ウホヌァ。」、ネ。」
--
、ヌ。「ツウ、、、ニ。「
1*2 + 3*4
、ウ、ヲ、、、ヲ、ホ、ケヘ、ィ、。」
、ウ、、ホケスハクフレ、マ。「
+
/ \
/ \
/ \
* *
/ \ / \
1 2 3 4
、ウ、、ハエカ、ク。」、ヌ。「、ウ、、チネ、゚ホゥ、ニ、・ラ・・ー・鬣爨ャ。「
// 1 * 2 var lhs = gcc.build( gcc.MULT_EXPR, types.integer_type_node, 1, 2 ); // 3 * 4 var rhs = gcc.build( gcc.MULT_EXPR, types.integer_type_node, 3, 4 ); // lhs + rhs var expr = gcc.build( gcc.PLUS_EXPR, types.integer_type_node, lhs, rhs );
、ウ、ヲ、ハ、。」、ネ。」
--
、ヌ。「、ウ、、ハエカ、ク、ヌ。「、タ、鬢タ、鬢ネケスハクフレ、コ、テ、ニ、荀テ、ニ。「、ヌ、ュ、ソケスハクフレ、gcc、ホエリソ、ヒ 、ト、テ、ウ、、ヌ、荀、ネ。「ツミア、ケ、・「・サ・・ヨ・熙ャタクタョ、オ、、。「、ネ、、、ヲ、、ア。」
--
、「、ネ。「ヘセテフ、ネ、キ、ニ。「gcc.fold、ネ、、、ヲケスハクフレテ讀ホトソ、キラササ、キ、ニ、ッ、、エリソ、ャ、「、テ、ソ、熙ケ、。」 ホ网ィ、ミ。「セ螟ホ・ラ・・ー・鬣爨ヌ。「
var lhs = gcc.build( gcc.MULT_EXPR, types.integer_type_node, 1, 2 ); var rhs = gcc.build( gcc.MULT_EXPR, types.integer_type_node, 3, 4 ); var expr = gcc.build( gcc.PLUS_EXPR, types.integer_type_node, lhs, rhs ); debug_tree( gcc.fold(expr) );
、ウ、、ハ、ユ、ヲ、ヒ、キ、ニ、荀、ネ。「
<integer_cst 8f18a0 type <integer_type 84aaf0> constant 14>
、ウ、、ハエカ、ク、ヒ。」
--
、゙、ネ、: シー、コ、、ヒ、マ。「buildエリソ、サネ、ヲ。」
、オ、ニ。「トソ、ホキラササ、ミ、テ、ォ、熙荀テ、ニ、ニ、筵「・、ハ、ホ、ヌ。「ハムソ、マョ、テ、ニ、゚、、ウ、ネ、ヒ、ケ、。」 ハムソ、コ、、ヒ、マ。「build_decl、サネ、ヲ。」
var v = gcc.build_decl( gcc.VAR_DECL, gcc.get_identifier("var_name"), types.integer_type_node );
ーソ、マ、ス、、セ、。「
、ウ、、ヌ。「、ウ、ウ、ォ、鮗、テ、ソハムソ、サネ、ィ、、隍ヲ、ヒ、ハ、。」サネ、、ハ、マトソ、ホセケ遉ネニア、ク、隍ヲ、ヒ。「 build、サネ、テ、ニケスハクフレ、ケステロ、ケ、、ネ、ュ、ヒコョ、シ、ニ、ェ、ッ。」
int hoge ; hoge + 4;
、ウ、ヲ、、、ヲセケ遉ケヘ、ィ、、ネ。「
// int hoge;
var hoge = gcc.build_decl( gcc.VAR_DECL, gcc.get_identifier("hoge"), types.integer_type_node );
// hoge + 4
var expr = gcc.build( gcc.PLUS_EXPR, types.integer_type_node, hoge, 4 );
debug_tree( expr );
、ウ、、ハエカ、ク、ヌ。」、「。シ。「、「、ネ。「get_identifier("str")、ネ、、、ヲ、ホ、マ。「 、ク、ト、マ。「・ミ・テ・ッ・ッ・ェ。シ・ネ、サネ、テ、ニ。「`str、ネス、ア、。」、ウ、テ、チ、ホ、ロ、ヲ、ャテサ、ッス、ア、ニクホィ、ャ、、、、、ホ、ヌ。「 、ウ、テ、チ、ホ、ロ、ヲ、ャ、ェ、ケ、ケ、癸」
、ウ、ウ、ヌ。「ハムソ、ホス魘テヘ、ネ。「、、、ュ、ソ、、、ホ、タ、ア、ノ。「・。シ・ォ・ハムソ、ネ、譯シ、ホ、マ。「 エリソ、ャフオ、、、ネサネ、ィ、ハ、、、ホ、ヌ。「、ウ、ウ、鬢リ、。「ツウ、ュ、ャス、ア、ハ、、。」
、ヌ。「、゙、「。「、ス、、ハ、ウ、、ハ、ヌ。「、チ、遉テ、ネ、荀荀ウ、キ、、、、タ、ア、ノ。「タ隍ヒエリソ、ホ、ト、ッ、熙ォ、ソ、タ篶タ、ケ、、ウ、ネ、ヒ、ケ、。」
--
、ネ、熙「、ィ、コ、゙、ネ、: ハムソ、、ト、ッ、、ヒ、マ。「build_decl、サネ、ヲ
、「、ネ、ヌス、ッ。」
、ネ、熙「、ィ、コ。「expand_stmt、ホテ讀ヒス、、、ニ、、、ア、ミ、、、、。「、ネ、、、テ、ソエカ、ク、ヌ。」
namespace langhook
{
function expand_stmt( stmts ) {
// 、ウ、ウ、ヒス、、、ニ、、、ア、ミ、、、、
}
function type_for_mode( mode, unsignedp ) {
return types.integer_type_node;
}
};
var fn_type = gcc.build_function_type( types.void_type_node, types.void_type_node );
var fn_decl = gcc.build_decl( gcc.FUNCTION_DECL, `main, fn_type );
fn_decl.result = gcc.build_decl( gcc.RESULT_DECL, null, types.void_type_node );
fn_decl.arguments = null;
fn_decl.used = true;
fn_decl.external = false;
fn_decl.static = true;
fn_decl.public = true;
fn_decl.initial = gcc.make_node( gcc.BLOCK );
gcc.tree_rest_of_compilation( fn_decl, false );
、ヌ。「マテ、・。シ・ォ・ハムソ、ヒフ皃キ、゙、キ、ニ。「、オ、ュ、ロ、ノ、ホホ网、チ、遉テ、ネハム、ィ、ニ。「
int hoge = 5; int hoge2 = hoge + 4;
、ネ、ヌ、筅ケ、、ォ。」、ウ、、、ト、ヌセニ筵ウ・・ム・、・、ケ、、ネ。「
、ウ、、ハエカ、ク、ヌ、ケ、ォ、ヘ。」ハムソ、ホス魘テヘ、ホサリト熙マ。「、ス、ホハムソ、ホinitial、ネ、、、ヲ・皈・ミ、ヒニヘ、テ、ウ、、ヌ、ェ、ッ。」 ホ网ィ、ミ。「セ螟ホ・ラ・・ー・鬣爨、ト、ッ、、ホ、・ウ。シ・ノ、ヌス、ッ、ネ。「
// int hoge = 5; var hoge = gcc.build_decl( gcc.VAR_DECL, `hoge, types.integer_type_node ); hoge.initial = 5; // 、ウ、、ャス魘テヘ // hoge + 4 var expr = gcc.build( gcc.PLUS_EXPR, types.integer_type_node, hoge, 4 ); // int hoge2 = hoge + 4; var hoge2 = gcc.build_decl( gcc.VAR_DECL, `hoge2, types.integer_type_node ); hoge2.initial = expr; debug_tree( hoge2 );
、ウ、、ハエカ、ク。ゥ、ヌ。「ハムソ、ホタクタ、ホ・「・サ・・ヨ・熙タクタョ、ケ、、ヒ、マ。「expand_decl。「 ハムソ、ホス魘テヘ、タクタョ、ケ、、ヒ、マ。「expand_decl_init、、ス、、セ、サネ、ヲ。」
セ螟ホ・ラ・・ー・鬣爨タクタョ、ケ、・ラ・・ー・鬣爨ャ。「
// int hoge = 5; var hoge = gcc.build_decl( gcc.VAR_DECL, `hoge, types.integer_type_node ); hoge.initial = 5; gcc.expand_decl( hoge ); // ハムソ gcc.expand_decl_init( hoge ); // hoge + 4 var expr = gcc.build( gcc.PLUS_EXPR, types.integer_type_node, hoge, 4 ); // int hoge2 = hoge + 4; var hoge2 = gcc.build_decl( gcc.VAR_DECL, `hoge2, types.integer_type_node ); hoge2.initial = expr; gcc.expand_decl( hoge2 ); gcc.expand_decl_init( hoge2 ); debug_tree( hoge2 );
、、ヌ。「、ウ、、、ト、。「エリソタクタョ、ホexpand_stmt、ヒニ、、ニ、荀、ネ。「
namespace langhook
{
function expand_stmt( stmts ) {
// int hoge = 5;
var hoge = gcc.build_decl( gcc.VAR_DECL, `hoge, types.integer_type_node );
hoge.initial = 5;
gcc.expand_decl( hoge );
gcc.expand_decl_init( hoge );
// hoge + 4
var expr = gcc.build( gcc.PLUS_EXPR, types.integer_type_node, hoge, 4 );
// int hoge2 = hoge + 4;
var hoge2 = gcc.build_decl( gcc.VAR_DECL, `hoge2, types.integer_type_node );
hoge2.initial = expr;
gcc.expand_decl( hoge2 );
gcc.expand_decl_init( hoge2 );
}
function type_for_mode( mode, unsignedp ) {
return types.integer_type_node;
}
};
var fn_type = gcc.build_function_type( types.void_type_node, types.void_type_node );
var fn_decl = gcc.build_decl( gcc.FUNCTION_DECL, `main, fn_type );
fn_decl.result = gcc.build_decl( gcc.RESULT_DECL, null, types.void_type_node );
gcc.current_function_decl = fn_decl;
fn_decl.arguments = null;
fn_decl.used = true;
fn_decl.external = false;
fn_decl.static = true;
fn_decl.public = true;
fn_decl.initial = gcc.make_node( gcc.BLOCK );
gcc.tree_rest_of_compilation( fn_decl, false );
、ウ、ヲ、ハ、。」、ウ、、ヌ。「・「・サ・・ヨ・熙タクタョ、ケ、コヌト羣ツ、ホ・ラ・・ー・鬣爍「、ネ、、、テ、ソ、ネ、ウ、、ォ。」、ウ、、、ト、。「hoge.ilog、ネ、ォ、ヒハンツク、キ、ニ。「
$ ilog1 -quiet --script-file=hoge.ilog
、ウ、、ハ、ユ、ヲ、ヒ、キ、ニシツケヤ、キ、ニ、荀。」
.file "<stdin>" .text .globl _main .def _main; .scl 2; .type 32; .endef _main: pushl %ebp movl %esp, %ebp subl $8, %esp movl $5, -4(%ebp) # hoge = 5 movl -4(%ebp), %eax # %eax = hoge addl $4, %eax # %eax += 4 movl %eax, -8(%ebp) # hoge2 = %eax leave ret
、マ、、。「、ウ、ウ、マエカニー、ケ、、ネ、ウ、、ヌ、ケ、陦」、ネ。「、、、テ、ニ、筍「、ス、ウ、鬢リ、、マヒヘ、ヒ、キ、ォ、、ォ、鬢、タ、、ヲ、ア、ノ。」
、゙、「。「、ス、、マ、、、、、ォ。」、ネ、熙「、ィ、コ。「・ウ。シ・ノタクタョ、マ、ウ、、ハエカ、ク、ヒ、ハ、、、ヌ、ケ、陦「、ネ。」
--
、゙、ネ、: ・。シ・ォ・ハムソ、スミ、ケ、ヒ、マ。「expand_decl。」 ハムソ、ホス魘テヘ、スミ、ケ、ヒ、マ。「expand_decl_init。」 ハムソ、ホス魘テヘ、マ。「、ス、ホハムソ、ホinitial、ヒシー、タ゚ト熙ケ、。」
、オ、ニ。「ヌセニ筅ヌ・ム。シ・ケ、キ、ソ、ホ、シニー、ヌケスハクフレ、ヒハムエケ、ケ、。「、ネ、、、ヲ、ホ、筅ハ、ォ、ハ、ォ、隍、、ォ、ネサラ、ヲ、、タ、ア、ノ。「 、ウ、、ヌ、マ、「、、゙、・ウ・・ム・、・鬢テ、ン、ッ、ハ、、、ホ、ヌ。「 ニホマ・ラ・・ー・鬣爨ケスハクフレ、ヒハムエケ、ケ、、隍ヲ、ハエカ、ク、ヒ、キ、゙、ケ、ォ、ヘ。」、ネ、、、ヲ、隍ヲ、ハマテ。」
、゙、コ、マ。「、ウ、ウ、ォ、鬘」ニホマハクサホ、・ネ。シ・ッ・、ヒハャイ、ケ、、ネ、、、ヲ、ネ、ウ、。」
コ」イサネ、ヲ・ネ。シ・ッ・、マ。「
[_a-zA-Z][_a-zA-Z0-9]* 「ェ シアハフサメ [0-9]+ 「ェ ソ ; 「ェ ・サ・゚・ウ・・ int 「ェ 'int' ・ュ。シ・。シ・ノ + - * / 「ェ ア鮟ササメ
、ウ、、ハ、ネ、ウ、、ォ。」、ウ、、ャイタマ、ヌ、ュ、、ミフ萃フオ、、、ォ、ネ。」
ILogScript、ヌ、マ。「サカ邊タマ、マ。「タオオャノスクス、ホ・・ケ・ネ、サネ、テ、ニ、ー、ヒ、遉テ、ネエハテア、ヒ、ヌ、ュ、、隍ヲ、ヒ、ハ、テ、ニ、、ホ、ヌ。「 、ス、、サネ、ヲ、ウ、ネ、ヒ、ケ、。」
、゙、コ、マ。「'4+5'、ネ、、、ヲハクサホ、イタマ、ケ、、ホ、ケヘ、ィ、。」 ・ネ。シ・ッ・、。「。ヨ(シホ,ハクサホ)。ラ、ネ、、、ヲノスクス、ヌ、「、鬢、ケ、ネ、ケ、、ネ。「、ウ、、、ト、イタマ、キ、ソキイフ、マ。「
(ターソ,'4') (・ラ・鬣ケ、ホア鮟ササメ,'+') (ターソ,'5')
、ネ、、、ヲサー、ト、ホヘラチヌ、ホ・・ケ・ネ、ヒ、ハ、、ミ、、、、、タ、、ヲ。」
、ウ、、イタマ、ケ、・ケ・ッ・・ラ・ネ、マ、ウ、、ハエカ、ク
var input = stream.string_to_rstream("4+5"); // ニホマ・ヌ。シ・ソ
var lex_table = [
["[0-9]+":`TOK_DIGIT],
["\\+":`TOK_PLUS],
[null:`TOK_EOF] // コヌク螟゙、ヌ、ュ、ソ、 `TOK_EOF、ハヨ、ケ
];
var lexer = Lex.generate_analyzer( lex_table );
while ( true ) {
var tok = lexer.next_token( input );
if ( tok.value == `TOK_EOF ) {
break;
}
print( "(" );
print( tok.value );
print( "," );
print( tok.chain[0] );
puts( ")" );
}
todo: 、ウ、、ノス、ッ。」タ篶タ、ャ、ウ、ウ、鬢リ、、ヒ。」