编译原理实验—语法分析器
一、算术表达式文法
VN = { E, T, E’, F, T’ }
其中:E为开始符号;
VT = { +, -, , /, (, ), id, num }
其中:id代表标识符,要求是长度不超过10的字母序列;num代表常数,要求是正整数;
文法规则集如下:
E→TE’
E’→+TE’| -TE’ |ε
T→FT’
T’→FT’| /FT’ |ε
F→(E) | id | num
二、文法中每个非终结符的First集和Follow集
三、由产生式F→(E) | id | num构造的递归下降分解程序示例:
PROCEDURE F
IF SYM=`id` THEN ADVANCE
ELSE
IF SYM=`num` THEN ADVANCE
ELSE
IF SYM=`(` THEN
BEGIN
ADVANCE;
E
IF SYM=`)` THEN ADVANCE
ELSE ERROR
END
ELSE ERROR
其中,SYM代表输入串指针所指的符号;ADVANCE代表把输入指针调至下一输入符号。
四、程序代码
#include<iostream>
#include<stdio.h>
#include <cctype>
#include <string.h>
#include <iomanip>
#include<cstdlib>
using namespace std;
char a[100];
string b[100];
static int j=0;
static int p=0;
void E();
void E1();
void T();
void T1();
void F();
bool isnum();
bool isid();
void error();
int main()
{
int k=0;
char c;
c = getchar();
while (c != '\n')
{
a[k]=c;
k++