C语言语法分析器
#include <stdio.h>
#include <string.h>
char prog[], token[];
char ch;
int syn,p,m,n,sum;
char * rwtab[]= {"begin","if","then","while","do","end"}; main()
{
p=;
printf("\n 请输入字符串: \n");
do{
ch=getchar();
prog[p++]=ch;
}while (ch!='#');
p=;
do{
scaner();
switch(syn)
{
case : printf("\n(%d,%d)",syn,sum); break;
case -: printf("\n(%s,出错!)",token);break;
default: printf("\n(%d,%s)",syn, token);
}
}while (syn!=);
printf("\n 分析成功 \n");
p=;
scaner();
E();
if (syn==)
printf("\n 没有错误. \n");
else printf("\n 出现错误. \n");
} scaner()
{
for (n=;n<;n++) token[n]=NULL;
m=;
sum=;
ch=prog[p++];
while (ch==' ') {ch=prog[p++];}
if (ch>='a'&& ch<='z')
{while (ch>='a'&& ch<='z'||ch>='' && ch<='')
{
token[m++]=ch;
ch=prog[p++];
} syn=;p--;
for (n=;n<;n++)
if(strcmp(token,rwtab[n])==) {syn=n+;break;}
}
else
if(ch>='' && ch<='')
{while (ch>='' && ch<='') {sum=sum*+(ch-''); ch=prog[p++];}
syn=;p--;
}
else
switch(ch)
{
case '<': token[m++]=ch;
ch=prog[p++];
if (ch=='>') {syn=;token[m++]=ch;}
else if (ch=='=') {syn=;token[m++]=ch;}
else {syn=;p--;}
break; case '>': m=; token[m++]=ch;
ch=prog[p++];
if (ch=='='){syn=;token[m++]=ch;}
else {syn=;p--;}
break;
case ':': m=; token[m++]=ch;
ch=prog[p++];
if (ch=='='){syn=;token[m++]=ch;}
else {syn=;p--;}
break;
case '+': syn=;token[]=ch;break;
case '-': syn=;token[]=ch;break;
case '*': syn=;token[]=ch;break;
case '/': syn=;token[]=ch;break;
case '=': syn=;token[]=ch;break;
case ';': syn=;token[]=ch;break;
case '(': syn=;token[]=ch;break;
case ')': syn=;token[]=ch;break;
case '#': syn=; token[]=ch;break;
default: syn=-;token[]=ch;
}
} E()
{printf("E ");
T();
E1(); } E1()
{printf("E1 ");
if (syn==) {
scaner();
T();
E1();
}
else {
if (syn!= && syn!=) error();
}
} T()
{printf("T ");
F();
T1();
} T1()
{printf("T1 ");
if (syn==) {
scaner();
F();
T1();
}
else {
if (syn!= && syn!= && syn!=) error();
}
} F()
{printf("F ");
if (syn==) {
scaner();
E();
if(syn==) scaner();
else error();
}
else if (syn== || syn==) scaner(); }
error()
{
printf("\n (%d,%s)错误地方! \n",syn, token);
}
运行结果:

C语言语法分析器的更多相关文章
- <编译原理 - 函数绘图语言解释器(2)语法分析器 - python>
<编译原理 - 函数绘图语言解释器(2)语法分析器 - python> 背景 编译原理上机实现一个对函数绘图语言的解释器 - 用除C外的不同种语言实现 设计思路: 设计函数绘图语言的文法, ...
- 03.从0实现一个JVM语言系列之语法分析器-Parser-03月01日更新
从0实现JVM语言之语法分析器-Parser 相较于之前有较大更新, 老朋友们可以复盘或者针对bug留言, 我会看到之后答复您! 源码github仓库, 如果这个系列文章对你有帮助, 希望获得你的一个 ...
- 开源语法分析器--ANTLR
序言 有的时候,我还真是怀疑过上本科时候学的那些原理课究竟是不是在浪费时间.比方学完操作系统原理之后我们并不能自己动手实现一个操作系统:学完数据库原理我们也不能弄出个像样的DBMS出来:相同,学完 ...
- 语法分析器初步学习——LISP语法分析
语法分析器初步学习——LISP语法分析 本文参考自vczh的<如何手写语法分析器>. LISP的表达式是按照前缀的形式写的,比如(1+2)*(3+4)在LISP中会写成(*(+ 1 2)( ...
- PL真有意思(二):程序设计语言语法
前言 虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了 和英语汉语这些自然语 ...
- Go语言语法汇总(转)
Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法 目录(?)[+] 最近看了看GoLang,把Go语言的语法 ...
- 编译原理简单语法分析器(first,follow,分析表)源码下载
编译原理(简单语法分析器下载) http://files.cnblogs.com/files/hujunzheng/%E5%8A%A0%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AC ...
- Tiny语法分析器(递归下降分析法实现)
递归规约规则是这样的 program→stmt-sequence stmt-sequence→stmt-sequence;statement|statement statement→if-stmt|r ...
- 有没有好用的开源sql语法分析器? - 匿名用户的回答 - 知乎
有没有好用的开源sql语法分析器? - 匿名用户的回答 - 知乎 presto,hive,drill,calcite,sparksq
随机推荐
- 命令行环境下简单实用的工具——重定向&管道
如果你对管道和重定向应用自如了,无需继续往下看.本文虽然以windows上cmd命令行环境演示,但同样适用于Unix/Linux等平台. 引言 关于管道和重定向,最初是在刘汝佳的<算法竞赛入门经 ...
- Pycharm用Ctrl+鼠标滚轮调节代码字体大小
File --> Setting --> Editor --> General --> 勾选Change font size (zoom) with Ctrl+Mouse W ...
- asp.net MVC excel数据导出
public FileResult ExportExcel() { var sbHtml = new StringBuilder(); sbHtml.Append("<table bo ...
- gcc编译时头文件和库文件搜索路径
特殊情况:用户自定义的头文件使用#include"mylib"时,gcc编译器会从当前目录查找头文件 一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始( ...
- yii框架中验证器声明一组内置验证器可以使用短名称引用
1.内置验证器的短名称分别有: boolean: yii\validators\BooleanValidator captcha: yii\captcha\CaptchaValidator compa ...
- a0=1、a1=1、a2=a1+a0、a3=a2+a1,以此类推,请写代码用递归算出a30?
public class Test { public static void main(String[] args) { System.out.println(recursive(30)); } pu ...
- ajax表单提交
HTML代码: <form id="formCity" action="/SiteMap/Search" method="get" o ...
- Python中使用递归输出嵌套列表并转化为大写
- Ajax验证用户名是否存在模板
Jsp 页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
- sql Lloader
create table ban_ji(id integer,ban_ji varchar2(25))insert into ban_ji values(1,'1-(1)');insert into ...