elalr 语法分析代码&正则生成器(将正则编译成易语言)
投稿作者:千战
围观人数:932
所属栏目:易语言源码
这是一段识别gbk中文和英文的标识符正则表达式
([a-zA-Z_]|[\x81-\xfe][\x40-\xfe])([a-zA-Z0-9_]|[\x81-\xfe][\x40-\xfe])*
原理是通过正则表达式的AST直接构造DFA自动机
下面是elalr解析形如 add(1, add(...) , ...) + (12*4) *4 这样的表达式的文法
通过这样的文法 LALR(1)可以描述几乎所有的CFG文法 也就是说可以解析 HTML JSON XML C/C++ JAVA 基本上所有的语言 网上也有很多他们的文法 可以比着写一下
%左结合 '+' '-' '*' '/'; //定义优先级与结合性
%开始符 表达式; // 这句的意思是 文法的开始就是 '表达式'
表达式 -> 表达式 '+' 表达式 [表达式_相加] | // 这是表达式的5个产生式 也就是说表达式可以用5种格式组成 [] 中包括的内容就是遇到这个形式的产生式将会调用什么子程序
表达式 '-' 表达式 [表达式_相减] |
表达式 '*' 表达式 [表达式_相乘] |
表达式 '/' 表达式 [表达式_相除] |
'(' 表达式 ')' [表达式_括号] ;
表达式 -> 数字 | 函数调用 ; // 这里是表达式的另外两个产生式 表达式可以是函数调用 也可以是数字
数字 -> "[0-9]+" [表达式_值] ;
函数调用 -> 标识符 '(' 参数列表 ')' [表达式_函数调用] ; // 函数调用的产生式 用来表述函数调用的形式
参数列表 -> 参数列表 ',' 表达式 [参数表_加入] | // 这个产生式是左递归的 只要后面出现 ',' 就会调用 参数表_加入 向数据中加入后面的表达式表达式 [参数表_创建] ;
标识符 -> "([a-zA-Z_]|[\x81-\xfe][\x40-\xfe])([a-zA-Z0-9_]|[\x81-\xfe][\x40-\xfe])*"; // 中文标识符
%无结合 为没有结合性但会定义优先级
%左结合 为左结合性以及定义优先级
%右结合 为左结合性以及定义优先级
'xxx' 单引号包裹的是 文本字面量 如 'if' 注意:内含转义
"xxx" 双引号包裹的是正则表达式
bracket
支持的正则语法比较简单 但也可以描述大部分正则了 不支持negative bracket
() . * + ? []
引用模块
无引用支持库
| 源码文件名 | 支持库文件名 | 支持库标识 |
|---|---|---|
| elalr.e | 系统核心支持库 5.3 | d09f2340818511d396f6aaf844c7e325 |
| 特殊功能支持库 3.1 | A512548E76954B6E92C21055517615B0 |
the end
免责声明:本文发布在易语言源码频道,为本站整理编辑,但不代表本站的观点和立场。
站内搜索
最新易语言源码
-
易语言android无障碍千战 2020-09-16 -
利用易语言组件自制快捷启动千战 2020-09-16 -
易语言希尔排序之自定义数据类型排序千战 2020-09-16 -
填充前后文本到指定长度千战 2020-09-15 -
实例_Wininet 置代理地址(立即生效无需重启)千战 2020-09-15 -
超级列表框设置颜色(不闪烁版本)删除表项记得处理颜色数组+置行高千战 2020-09-15 -
小白盒 扫码枪 二维码扫描设备 键盘钩子源码千战 2020-09-15 -
WOL远程开机千战 2020-09-14 -
熊出没之拼图游戏千战 2020-09-14 -
Ylink(纯UI)千战 2020-09-14
推荐易语言源码


