语法分析器的编写

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

请问要怎么做呢?
能不能给我说下思路呢?

13 个解决方案

#1


你说的这个是词法分析而不是语法分析

#2


 编译原理,递归下降分析

#3


引用 1 楼 caozhy 的回复:
你说的这个是词法分析而不是语法分析

对不起,是写错了,
请问下要怎么做呢?

#4


不知道你说的“不能自定义语法”是什么意思。

词法分析无非就是构造NFA DFA,任何一本编译原理上都有。

#5


引用 2 楼 lm_whales 的回复:
 编译原理,递归下降分析

但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较?

#6


引用 4 楼 caozhy 的回复:
不知道你说的“不能自定义语法”是什么意思。

词法分析无非就是构造NFA DFA,任何一本编译原理上都有。

但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较? 

还有就是我在网上看到的大多数都是直接定义好的,没见到词法分析的代码,都是直接拿定义好的词法用的

#7


引用 6 楼 qilinno 的回复:
Quote: 引用 4 楼 caozhy 的回复:

不知道你说的“不能自定义语法”是什么意思。

词法分析无非就是构造NFA DFA,任何一本编译原理上都有。

但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较? 

还有就是我在网上看到的大多数都是直接定义好的,没见到词法分析的代码,都是直接拿定义好的词法用的


如果你不懂NFA,根本看不懂词法分析的代码。

#8


引用 7 楼 caozhy 的回复:
Quote: 引用 6 楼 qilinno 的回复:

Quote: 引用 4 楼 caozhy 的回复:

不知道你说的“不能自定义语法”是什么意思。

词法分析无非就是构造NFA DFA,任何一本编译原理上都有。

但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较? 

还有就是我在网上看到的大多数都是直接定义好的,没见到词法分析的代码,都是直接拿定义好的词法用的


如果你不懂NFA,根本看不懂词法分析的代码。

我看过NFA了,但是要怎么分析int这种的关键字呢,要怎么做才能让它能用?

#9


int
就是
i-n-t-分隔符
数字就是
数字(+)-分隔符

#10


引用 9 楼 caozhy 的回复:
int
就是
i-n-t-分隔符
数字就是
数字(+)-分隔符

还是不理解,
如果我有int和double,还有可能有integer,do等,那么我应该怎么确定待比较的字符串要和哪些进行比较呢?
还有就是状态应该怎么用代码表示呢?各个状态在代码中是什么呢?

#11


引用 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
我看了这篇文章,这篇文章写的就是没法改变,要是想改变要怎么办呢?

#12


LEX+YACC
FLEX+BISON

#13


结贴结贴结贴

#1


你说的这个是词法分析而不是语法分析

#2


 编译原理,递归下降分析

#3


引用 1 楼 caozhy 的回复:
你说的这个是词法分析而不是语法分析

对不起,是写错了,
请问下要怎么做呢?

#4


不知道你说的“不能自定义语法”是什么意思。

词法分析无非就是构造NFA DFA,任何一本编译原理上都有。

#5


引用 2 楼 lm_whales 的回复:
 编译原理,递归下降分析

但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较?

#6


引用 4 楼 caozhy 的回复:
不知道你说的“不能自定义语法”是什么意思。

词法分析无非就是构造NFA DFA,任何一本编译原理上都有。

但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较? 

还有就是我在网上看到的大多数都是直接定义好的,没见到词法分析的代码,都是直接拿定义好的词法用的

#7


引用 6 楼 qilinno 的回复:
Quote: 引用 4 楼 caozhy 的回复:

不知道你说的“不能自定义语法”是什么意思。

词法分析无非就是构造NFA DFA,任何一本编译原理上都有。

但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较? 

还有就是我在网上看到的大多数都是直接定义好的,没见到词法分析的代码,都是直接拿定义好的词法用的


如果你不懂NFA,根本看不懂词法分析的代码。

#8


引用 7 楼 caozhy 的回复:
Quote: 引用 6 楼 qilinno 的回复:

Quote: 引用 4 楼 caozhy 的回复:

不知道你说的“不能自定义语法”是什么意思。

词法分析无非就是构造NFA DFA,任何一本编译原理上都有。

但是有些地方还是想不太明白,就是我可以分析出<数字>0这种的词法,但是int这种的怎么分析呢?简单的比较? 

还有就是我在网上看到的大多数都是直接定义好的,没见到词法分析的代码,都是直接拿定义好的词法用的


如果你不懂NFA,根本看不懂词法分析的代码。

我看过NFA了,但是要怎么分析int这种的关键字呢,要怎么做才能让它能用?

#9


int
就是
i-n-t-分隔符
数字就是
数字(+)-分隔符

#10


引用 9 楼 caozhy 的回复:
int
就是
i-n-t-分隔符
数字就是
数字(+)-分隔符

还是不理解,
如果我有int和double,还有可能有integer,do等,那么我应该怎么确定待比较的字符串要和哪些进行比较呢?
还有就是状态应该怎么用代码表示呢?各个状态在代码中是什么呢?

#11


引用 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
我看了这篇文章,这篇文章写的就是没法改变,要是想改变要怎么办呢?

#12


LEX+YACC
FLEX+BISON

#13


结贴结贴结贴