下你所需,载你所想!
汇集开发技术源码资料

正则代码生成器类似yacc bison易语言LALR语法分析

:29.648KB :1 :2020-09-11 16:52:37

部分简介

自己实现了个DFA的正则引擎与LALR的分析器构造
后来想想我大屑语言还没有个语法分析的代码生成器 给屑语言加点buff
%left '\+' '\-' '\*' '\/';
%start expr;
expr -> expr '\+' expr [add] |
expr '\-' expr [sub] |
expr '\*' expr [mul] |
expr '\/' expr [div] |
'\(' expr '\)' [compound];
expr -> identifier [id] | number [number] | func_call[invoke];
func_call -> identifier '\(' args '\)';
args -> args ',' expr [arg_list] | expr [arg_list];
identifier -> '[a-zA-Z_]+';
number -> '[0-9]+';
%left
%right
%none
这三个用来定义结合性与优先级
%left '\+' '\-' ;
%right '\*' '\/';
这句代码的意思是 这四个正则表达式的优先级分别为 1 2 3 4
'\+' '\-' 为左结合
'\*' '\/' 为右结合
所有单引号与双引号包裹的内容都是正则表达式 请注意转义

%start
用来定义起始符号也就是最大的文法符号(或者说最终规约出的结果)

[action] 中括号中是执行的规约动作

没有弄LALR文法的错误检测 请严格按照LALR的文法书写 Reduce-Reduce冲突不会提示

正则代码生成器类似yacc bison易语言LALR语法分析

热门推荐

相关文章