算术表达式的语法分析器
来源:互联网 发布:北塔网管软件 编辑:程序博客网 时间:2024/05/01 18:21
(华保健老师)在这个题目中,要求你完成一个针对算术表达式的语法分析器。该算术表达式的上下文无关文法是:
E -> E + T
| E - T
| T
T -> T * F
| T / F
| F
F -> num
| (E)
#include <ctype.h>#include <stdio.h>#include <stdlib.h>void parse_F();void parse_T();void parse_E();void error (char *want, char got);int i;char *str = 0;void error (char *want, char got){ fprintf (stderr, "Compling this expression:\n%s\n", str); int j = i; while (j--) fprintf (stderr, " "); fprintf (stderr, "^\n"); fprintf (stderr, "Syntax error at position: %d\n" "\texpecting: %s\n" "\tbut got : %c\n", i, want, got); exit (0); return;}void parse_F(){ char c = str[i]; if (isdigit(c)){ i++; return; } if (c=='('){ i++; parse_E(); c = str[i]; if (c==')'){ i++; return; } error ("\')\'", c); return; } error ("\'0-9\' or \'(\'", c); return;}void parse_T(){ parse_F(); char c = str[i]; while (c=='*' || c== '/'){ i++; parse_F(); c = str[i]; } return;}void parse_E(){ parse_T(); char c = str[i]; while (c=='+' || c=='-'){ i++; parse_T(); c = str[i]; } return;}void parse (char *e){ str = e; i = 0; parse_E(); if (str[i]=='\0') return; error ("\'+\' or '\\0\'", str[i]); return;}///////////////////////////////////////////////// Your job:// Add some code into the function parse_E() and// parse_T to parse "-" and "/" correctly.// When you finish your task, NO error message// should be generated.// Enjoy! :-Pint main (char argc, char **argv){ // There are the following rules on an expression: // 1. Every expression is represented as a string; // 2. integers are non-negative; // 3. integers are between 0-9. char *e; e = "(2)"; parse(e); e = "(3+4*5)"; parse(e); e = "(8-2)*3"; parse(e); e = "(8-2)/3"; parse(e); return 0;}
0 0
- 算术表达式的语法分析器
- 编译器实践三 之 针对算术表达式的语法分析器
- 简单的语法分析器
- 算术表达式的计算
- 算术表达式的计算
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的validation
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- 算术表达式的转换
- win7下编译android版ffmpeg
- windows8.1下apache+php+mysql配置
- 笔记:Java 性能优化权威指南 第3章 JVM概览
- 1021. 个位数统计 (15)
- 关于获取webapp路径问题
- 算术表达式的语法分析器
- IOSUI基础控件总结
- LAMP Ubuntu 12.04 LTS 搭建 ---附带memcache redis安装(源码)
- 京东销售联盟佣金支付始末
- 第十二篇 C# 将HTML 直接转成Excel
- [leetcode] Compare Version Numbers
- Android 拖拽功能的使用实例
- size_t与size_type
- 概率学习第一章