📄 llkparser.sa
字号:
(*
ANTLR Translator Generator
Project led by Terence Parr at http://www.jGuru.com
Software rights: http://www.antlr.org/RIGHTS.html
$Id: llkparser.sa,v 1.1.1.1 2002/01/02 19:59:09 agno Exp $
*)
class ANTLR_LLKPARSER{ TOKEN < $ANTLR_TOKEN, AST < $ANTLR_AST{AST} } is
include ANTLR_PARSER{ TOKEN, AST } create -> parser_create;
private attr k : INT;
create ( k : INT ) : SAME is
res : SAME := parser_create;
res.k := k;
return res;
end;
create ( state : ANTLR_PARSER_SHARED_INPUT_STATE{TOKEN} , k : INT ) : SAME is
res : SAME := parser_create;
res.k := k;
res.input_state := state;
return res;
end;
create ( token_buf : ANTLR_TOKEN_BUFFER{TOKEN} , k : INT ) : SAME is
res : SAME := parser_create;
res.k := k;
res.token_buffer := token_buf;
return res;
end;
create ( lexer : $ANTLR_TOKEN_STREAM{TOKEN} , k : INT ) : SAME is
res : SAME := parser_create;
token_buf : ANTLR_TOKEN_BUFFER{TOKEN} := #ANTLR_TOKEN_BUFFER{TOKEN}( lexer );
res.token_buffer := token_buf;
return res;
end;
-- Consume another token from the input stream. Can only write sequentially!
-- If you need 3 tokens ahead, you must consume 3 times.
-- Note that it is possible to overwrite tokens that have not been matched.
-- For example, calling consume 3 times when k=2, means that the first token
-- consumed will be overwritten with the 3rd.
consume is
input_state.input.consume;
end;
LA( i : INT ) : INT is
return input_state.input.LA(i);
end;
LT( i : INT ) : TOKEN is
return input_state.input.LT(i);
end;
private trace( ee, rname : STR ) is
trace_indent;
#OUT + ee + rname;
if ( input_state.guessing > 0 ) then
#OUT + "; [guessing]";
else
#OUT + "; ";
end;
i : INT := 1;
loop while! ( i <= k );
if ( i /= 1 ) then
#OUT + ", ";
end;
#OUT + "LA(" + i + ")=" + LT(i).text;
i := i + 1;
end;
#OUT + "\n";
end;
trace_in ( rname : STR ) is
trace_depth := trace_depth + 1;
trace("> ", rname);
end;
trace_out( rname : STR ) is
trace("< ", rname);
trace_depth := trace_depth - 1;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -