token ⇒ 语法分析树
first
get right first
right equal
follow
foreach
get next
区分终结符和非终结符,终结符 都用字符串存, 非终结符用英文,终极符用 _... 表示
exports.define = [
'<函数定义>-><修饰词闭包> <类型> <变量> ( <参数声明> ) { <函数块> }',
'<修饰词闭包>-><修饰词> <修饰词闭包>|@','<修饰词>->public|private|protected',
'<类型>->int <取地址>|char <取地址>|boolean <取地址>|void <取地址>',
'<取地址>-><星号> <取地址>|@',
'<星号>->*',
'<变量>-><标志符> <数组下标>',
'<标志符>->id',
'<数组下标>->[ <因式> ]|@',
'<因式>->( <表达式> )|<变量>|<数字>',
'<数字>->digit',
'<表达式>-><因子> <项>',
'<因子>-><因式> <因式递归>',
'<因式递归>->* <因式> <因式递归>|/ <因式> <因式递归>|@',
'<项>->+ <因子> <项>|- <因子> <项>|@',
'<参数声明>-><声明> <声明闭包>|@',
'<声明>-><修饰词闭包> <类型> <变量> <赋初值>',
'<赋初值>->= <右值>|@',
'<右值>-><表达式>|{ <多个数据> }',
'<多个数据>-><数字> <数字闭包>',
'<数字闭包>->, <数字> <数字闭包>|@',
'<声明闭包>->, <声明> <声明闭包>|@',
'<函数块>-><声明语句闭包> <函数块闭包>',
'<声明语句闭包>-><声明语句> <声明语句闭包>|@',
'<声明语句>-><声明> ;',
'<函数块闭包>-><赋值函数> <函数块闭包>|<for循环> <函数块闭包>|<条件语句> <函数块闭包>|<函数返回> <函数块闭包>|@',
'<赋值函数>-><变量> <赋值或函数调用>',
'<赋值或函数调用>->= <右值> ;|( <参数列表> ) ;',
'<参数列表>-><参数> <参数闭包>',
'<参数闭包>->, <参数> <参数闭包>|@',
'<参数>-><标志符>|<数字>|<字符串>',
'<字符串>->string',
'<for循环>->for ( <赋值函数> <逻辑表达式> ; <后缀表达式> ) { <函数块> }',
'<逻辑表达式>-><表达式> <逻辑运算符> <表达式>',
'<逻辑运算符>-><|>|==|!=',
'<后缀表达式>-><变量> <后缀运算符>',
'<后缀运算符>->++|--',
'<条件语句>->if ( <逻辑表达式> ) { <函数块> } <否则语句>',
'<否则语句>->else { <函数块> }|@',
'<函数返回>->return <因式> ;'
];
分析 加减乘除的, 优先级高的深度深
评论区