1.5 小结
通过JAVA自带的类库可以轻松完成动态输入【正则表达式】的程序,而C++的我目前不懂是否有这些类,如果要写自带构图的,代码会比较复杂,所以这题我用C++写的程序是固定的【正则表达式】的,这样只需要在运行核心代码前用固定方式构建好状态转换图就可以了。
3
2 LL(1)分析
2.1 LL(1)文法 S→aD D→STe|ε T→bH|H H→d|ε
2.2 LL(1)预测分析表 S D T H a S→aD D→STe e D→ε T→H H→ε b D→ε T→bH d D→ε T→H H→d # D→ε 2.3 分析程序代码
#include
string LL[255][255];
string reverse(string str)//字符串倒置 { char t[100]={0}; int len=str.length(); for(int i=0;i void init() { //\表示没有这种转化 //\表示ε for(int i=0;i<255;i++) for(int j=0;j<255;j++) LL[i][j]=\ LL['S']['a']=\ LL['D']['a']=\ LL['D']['e']=\ LL['D']['b']=\ LL['D']['d']=\ LL['D']['#']=\ LL['T']['e']=\ LL['T']['b']=\ LL['T']['d']=\ LL['H']['e']=\ LL['H']['d']=\ 4 stack=\} void work() { puts(\符号栈 输入串 动作\ cout< int main() { init(); puts(\请输入符号串\ cin>>s; s=s+\ work(); return 0; } 5 2.4 程序运行截图 6 2.5 小结 以【”0”】作为错误输入的标志,把2.1中给定表格中无数据的项填入0,当匹配到0时,表示输入的数据错误。因为本题要求显示【符号栈】,所以我用string而不是用stack来表示符号栈,但运用的仍然是栈的思想。这题我出错的地方在于循环条件写成【s[i]!=’#’】 (已改正),循环条件应该为【!stack.empty()】,而成功判断放在循环外,为【s[i]=='#'】。当输入错误时,一定会在循环内部被找出,或者是程序运行时抛出的异常都代表输入错误。 7