语法分析器的编写

qilinno 2014-04-10 07:11:50
小弟最近课程需要些一个语法分析器,很简单的,就是先规定好语法,然后将输入的句子根据语法进行划分,可是我应该怎么写呢?谁能给我点思路?我现在看到的都是一些语法规则固定好的,不能自定义语法。
我想的是:
首先‘<’和‘>’是特殊符号,用来指定某种单词,
‘\’是转义字符,‘\\’表示‘\’,‘\<’表示字符‘<’,‘\>’表示字符‘>’
然后输入规则(共两列):
列1 列2
关键字 int
double
数字 1
2
3
4
5
6
7
8
9
0
<数字>1
<数字>2
<数字>3
<数字>4
<数字>5
<数字>6
<数字>7
<数字>8
<数字>9
<数字>0
...

请问要怎么做呢?
能不能给我说下思路呢?
...全文
206 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qilinno 2014-04-13
  • 打赏
  • 举报
回复
结贴结贴结贴
赵4老师 2014-04-11
  • 打赏
  • 举报
回复
LEX+YACC FLEX+BISON
qilinno 2014-04-10
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
int
就是
i-n-t-分隔符
数字就是
数字(+)-分隔符



while((ch=getchar())!=EOF)
  switch(state)
    case 1 :if ch=="/",state=2,break;
    case 2: if ch=="*",state=3
        else state=1;break;
    case 3:..........
    case 4:..........

http://www.cnblogs.com/yanlingyin/archive/2012/04/17/2451717.html
我看了这篇文章,这篇文章写的就是没法改变,要是想改变要怎么办呢?
qilinno 2014-04-10
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
int 就是 i-n-t-分隔符 数字就是 数字(+)-分隔符
还是不理解, 如果我有int和double,还有可能有integer,do等,那么我应该怎么确定待比较的字符串要和哪些进行比较呢? 还有就是状态应该怎么用代码表示呢?各个状态在代码中是什么呢?
threenewbee 2014-04-10
  • 打赏
  • 举报
回复
int 就是 i-n-t-分隔符 数字就是 数字(+)-分隔符
qilinno 2014-04-10
  • 打赏
  • 举报
回复
引用 7 楼 caozhy 的回复:
[quote=引用 6 楼 qilinno 的回复:] [quote=引用 4 楼 caozhy 的回复:] 不知道你说的“不能自定义语法”是什么意思。 词法分析无非就是构造NFA DFA,任何一本编译原理上都有。
但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较? 还有就是我在网上看到的大多数都是直接定义好的,没见到词法分析的代码,都是直接拿定义好的词法用的[/quote] 如果你不懂NFA,根本看不懂词法分析的代码。[/quote] 我看过NFA了,但是要怎么分析int这种的关键字呢,要怎么做才能让它能用?
threenewbee 2014-04-10
  • 打赏
  • 举报
回复
引用 6 楼 qilinno 的回复:
[quote=引用 4 楼 caozhy 的回复:] 不知道你说的“不能自定义语法”是什么意思。 词法分析无非就是构造NFA DFA,任何一本编译原理上都有。
但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较? 还有就是我在网上看到的大多数都是直接定义好的,没见到词法分析的代码,都是直接拿定义好的词法用的[/quote] 如果你不懂NFA,根本看不懂词法分析的代码。
qilinno 2014-04-10
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
不知道你说的“不能自定义语法”是什么意思。 词法分析无非就是构造NFA DFA,任何一本编译原理上都有。
但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较? 还有就是我在网上看到的大多数都是直接定义好的,没见到词法分析的代码,都是直接拿定义好的词法用的
qilinno 2014-04-10
  • 打赏
  • 举报
回复
引用 2 楼 lm_whales 的回复:
编译原理,递归下降分析
但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较?
threenewbee 2014-04-10
  • 打赏
  • 举报
回复
不知道你说的“不能自定义语法”是什么意思。 词法分析无非就是构造NFA DFA,任何一本编译原理上都有。
qilinno 2014-04-10
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
你说的这个是词法分析而不是语法分析
对不起,是写错了, 请问下要怎么做呢?
lm_whales 2014-04-10
  • 打赏
  • 举报
回复
编译原理,递归下降分析
threenewbee 2014-04-10
  • 打赏
  • 举报
回复
你说的这个是词法分析而不是语法分析

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧