上星期写完词法分析器的时候,曾遇上一个无关紧要却X疼的问题。毕竟是第一次完整地写整个语言的编译器(暂且这么叫着吧,解释器更靠谱),由于经验不足,在字符串解析这一块驻足了两天才解决掉,这里记录下来供以后参考。哦对了,之所以想自己手写词法分析器,并不是我不知道有自动工具可以自动生成,而是我不会用,嗯,果...
分类:
数据库 时间:
2014-08-10 18:19:10
阅读次数:
414
1.3 词法分析中的‘贪心法’
每个符号应该包含尽可能多的字符。需注意的是符号中间不能有空格。
a---b等同于表达式a -- - b
但是不同于a - -- b
y/*p; /*被解释为一段注释的开始
正确有意义的写法应该是y=x/ *p或者y=x/(*p);
1.5 字符与字符串
用单引号引起的一个字符实际上代表一个整数。
用双引号引起的字符串,代表的却...
分类:
其他好文 时间:
2014-08-09 16:01:08
阅读次数:
246
Flex如何处理二义性模式:1、词法分析器匹配输入时匹配尽可能多的字符串2、如果两个模式都可以匹配的话,匹配在程序中更早出现的模式上下文相关的记号flex提供起始状态(start state)的概念,可以动态地开启和关闭针对特定模式的识别,对于处理上述上下文相关的情况比较有用。Flex词法分析器中的...
分类:
其他好文 时间:
2014-08-07 18:41:21
阅读次数:
373
由于老师要求,最近在做oceanbase存储过程的实现,在oceanbase 0.4以前是不支持存储过程的。实现的主要步骤主要包括
1、语法解析
2、词法解析
3、具体执行语法树的步骤
现在先来说说语法解析吧,在这一块主要是使用的flex( 词法分析器生成工具) 和bison(语法分析器生成器) 这两个是对用户输入的存储过程语句进行解析的
来具体说说该怎么实现对sql语句的分析吧
...
分类:
数据库 时间:
2014-08-06 14:59:51
阅读次数:
468
首先写词法分析器: 词法分析器要返回记号: “+” 返回ADD “-” 返回SUB “*” 返回MUL “/” 返回DIV 输入的实数全部被当作double类型处理 换行符返回CR calc.l: %{#include #include "y.tab.h"int yywrap(void){ /*免链...
分类:
其他好文 时间:
2014-07-28 14:25:53
阅读次数:
329
1. 词法“陷阱”= 不同于 == , 可以通过if( 1 == a )来避免& | 不同于 && ||词法分析中的“贪心法”编译器将程序分解成符号的方法是,从左到右一个字符一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部...
分类:
其他好文 时间:
2014-07-25 14:17:11
阅读次数:
296
这次实验被“过来人”们定位非常easy,实验内容例如以下:-----------------------------------------------------------------------------------对例如以下工作进行展开描写叙述(1)给出语言的词法规则描写叙述· 标识符、k...
分类:
其他好文 时间:
2014-07-24 22:13:12
阅读次数:
330
PHP:脚本编程语言,php解释器WebApp:面向对象的特性Zend:第一段:词法分析、语法分析、编译为Opcode;opcode放置于内存中第二段:执行opcode;php分两段的好处,当用户第二次请求的时候,就直接执行这个OPCODE即可。这样之后速度也会快些,但是在不同的进程之间是不能共享opc..
分类:
其他好文 时间:
2014-07-22 18:18:42
阅读次数:
362
Name: Newsletter: 1 2 3 js$("form div > p[name=aaron]")解析的流程:编译器:分5个步骤涉及: TAG元素 关系选择器 属性选择器1:通过tokenize词法分析器分组2:遍历tokens,从右边...
分类:
其他好文 时间:
2014-07-21 14:23:03
阅读次数:
299
UVA 11291 - Smeech
题目链接
题意:给定一个表达式形如e=(p,e1,e2)
该表达式的值为 p?(e1+e2)+(1?p)?(e1?e2),求出值
思路:题目是很水,但是处理起来还挺麻烦的,模拟写编译器LEX分析器原理去写了。
代码:
#include
#include
const int N = 100005;
char str[N];...
分类:
其他好文 时间:
2014-07-17 21:07:29
阅读次数:
170