Skip to content

Commit 5960aa4

Browse files
authored
Merge pull request #1 from qinzhonghe/OPA-GUI
Opa gui
2 parents 4d64c8f + 09d75ae commit 5960aa4

15 files changed

+139
-92
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ target_wrapper.*
4141

4242
# QtCreator CMake
4343
CMakeLists.txt.user*
44+
/SyntacticAnalyzer/.vs/SyntacticAnalyzer/v15/Browse.VC.db

SyntacticAnalyzer/SyntacticAnalyzer/AnalysisStep.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ void AnalysisStep::add_step(map<int, vector<string>> setp) {
1818
int col = 0;
1919
for (it; it != end; it++) {
2020
int size = it->second.size();
21-
//qDebug() << "size=" << QString("%1").arg(size);
22-
//setp_model->setHeaderData(row, Qt::Vertical, QString("%1").arg(it->first));
2321
col = 0;
2422
setp_model->setItem(row, col, new QStandardItem(QString("%1").arg(it->first)));
2523
str_it = it->second.begin();
@@ -42,12 +40,11 @@ AnalysisStep::~AnalysisStep() {
4240
}
4341

4442
void AnalysisStep::init_table() {
45-
setp_model->setColumnCount(5);
46-
//setp_model->setHeaderData(0, Qt::Horizontal, QString::fromLocal8Bit("步骤"));
43+
setp_model->setColumnCount(5);;
4744
setp_model->setHeaderData(0, Qt::Horizontal, QString::fromLocal8Bit("符号栈状态"));
4845
setp_model->setHeaderData(1, Qt::Horizontal, QString::fromLocal8Bit("关系"));
4946
setp_model->setHeaderData(2, Qt::Horizontal, QString::fromLocal8Bit("输入串状态"));
50-
setp_model->setHeaderData(3, Qt::Horizontal, QString::fromLocal8Bit("最短素短语"));
47+
setp_model->setHeaderData(3, Qt::Horizontal, QString::fromLocal8Bit("最左素短语"));
5148
setp_model->setHeaderData(4, Qt::Horizontal, QString::fromLocal8Bit("动作"));
5249
ui.setp_table->setModel(setp_model);
5350
ui.setp_table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);

SyntacticAnalyzer/SyntacticAnalyzer/SyntacticAnalyzer.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -553,27 +553,39 @@ void SyntacticAnalyzer::check_expression(string exp, int record_index) {
553553
map<int, string> error = exp_check.get_error();
554554
map<int, string>::iterator it = error.begin();
555555
map<int, string>::iterator end = error.end();
556-
bool flag = true;
557556
QString error_info = "";
558557
if (error.empty()) //表达式生成超链接
559558
ui.output_text->append(QString("<html><p><a href=\"goto://setp?record_index=%1\">%2</a></p></html>").arg(record_index).arg(QString::fromStdString(exp)));
560559
else
561560
ui.output_text->append(QString::fromStdString(exp));
562-
for (it; it != end; it++) {
563-
flag = false;
561+
qDebug() << QString::fromStdString(exp);
562+
for (it; it != end; it++) { //高亮错误
564563

565564
QTextCursor cursor(ui.output_text->document());
566565
QTextCursor cursor_postion(ui.output_text->textCursor());
567566
QTextCharFormat color_format;
568567
color_format.setForeground(Qt::red);
569568
int postion = cursor_postion.position() - (exp.length() - it->first);
570-
cursor.setPosition(postion, QTextCursor::KeepAnchor);
571-
cursor.movePosition(QTextCursor::NoMove, QTextCursor::KeepAnchor, 1);
569+
cursor.setPosition(postion - 1, QTextCursor::MoveAnchor);
570+
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 0);
571+
cursor.insertText(" ");
572+
cursor.setPosition(postion + 1, QTextCursor::MoveAnchor);
573+
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 0);
574+
cursor.insertText(" ");
575+
postion = cursor_postion.position() - (exp.length() + 2 - it->first);
576+
cursor.setPosition(postion, QTextCursor::MoveAnchor);
577+
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 1);
572578
cursor.select(QTextCursor::WordUnderCursor);
573-
cursor.setCharFormat(color_format);
579+
cursor.mergeCharFormat(color_format);
580+
//去掉空格
581+
cursor.setPosition(postion - 1, QTextCursor::MoveAnchor);
582+
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 0);
583+
cursor.deleteChar();
584+
cursor.setPosition(postion, QTextCursor::MoveAnchor);
585+
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 0);
586+
cursor.deleteChar();
574587
}
575588
for (it = error.begin(); it != end; it++) { //错误记录生成超链接
576-
flag = false;
577589

578590
ui.output_text->append(QString("<html><p><a href=\"goto://setp?record_index=%1\">%2:%3</a></p></html>").arg(record_index).arg(it->first).arg(QString::fromLocal8Bit(it->second.data())));
579591
}

SyntacticAnalyzer/SyntacticAnalyzer/SyntacticAnalyzer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
#include <QUrlQuery>
3232
#include <QMessageBox>
3333
using namespace std;
34+
35+
3436
class SyntacticAnalyzer : public QMainWindow {
3537
Q_OBJECT
3638

SyntacticAnalyzer/SyntacticAnalyzer/SyntacticAnalyzer.vcxproj

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,16 @@
3030
</PropertyGroup>
3131
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
3232
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
33-
<LibraryPath>D:\QT\QT\5.9\MSVC2017_64\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64</LibraryPath>
33+
<LibraryPath>$(ProjectDir)\lib;D:\QT\QT\5.9\MSVC2017_64\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64</LibraryPath>
34+
<IncludePath>$(ProjectDir)\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
35+
<ExecutablePath>$(ProjectDir)\lib;$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(FxCopDir);$(PATH);</ExecutablePath>
3436
</PropertyGroup>
3537
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
3638
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
39+
<LibraryPath>$(ProjectDir)\lib;D:\QT\QT\5.9\MSVC2017_64\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64</LibraryPath>
40+
<IncludePath>D:\QT\QT\5.9\MSVC2017_64;$(ProjectDir)\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
41+
<ReferencePath>$(VC_ReferencesPath_x64);D:\QT\QT\5.9\MSVC2017_64</ReferencePath>
42+
<ExecutablePath>$(ProjectDir)\lib;$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(FxCopDir);$(PATH);</ExecutablePath>
3743
</PropertyGroup>
3844
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
3945
<Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
@@ -63,9 +69,10 @@
6369
<Link>
6470
<SubSystem>Windows</SubSystem>
6571
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
66-
<AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
72+
<AdditionalLibraryDirectories>$(ProjectDir)\lib;$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
6773
<GenerateDebugInformation>true</GenerateDebugInformation>
68-
<AdditionalDependencies>operator_precedence_analysis.lib;libboost_regex-vc141-mt-gd-x64-1_67.lib;D:\QT\QT\5.9\MSVC2017_64\lib\qtmaind.lib;shell32.lib;E:\LIB\boost_1_67_0\lib64-msvc-14.1\libboost_regex-vc141-mt-gd-x64-1_67.lib;D:\QT\QT\5.9\MSVC2017_64\lib\Qt5Widgetsd.lib;D:\QT\QT\5.9\MSVC2017_64\lib\Qt5Guid.lib;D:\QT\QT\5.9\MSVC2017_64\lib\Qt5Cored.lib</AdditionalDependencies>
74+
<AdditionalDependencies>operator_precedence_analysisd.lib;libboost_regex-vc141-mt-gd-x64-1_67.lib;D:\QT\QT\5.9\MSVC2017_64\lib\qtmaind.lib;shell32.lib;E:\LIB\boost_1_67_0\lib64-msvc-14.1\libboost_regex-vc141-mt-gd-x64-1_67.lib;D:\QT\QT\5.9\MSVC2017_64\lib\Qt5Widgetsd.lib;D:\QT\QT\5.9\MSVC2017_64\lib\Qt5Guid.lib;D:\QT\QT\5.9\MSVC2017_64\lib\Qt5Cored.lib</AdditionalDependencies>
75+
<AdditionalOptions>/ENTRY:"mainCRTStartup" %(AdditionalOptions)</AdditionalOptions>
6976
</Link>
7077
<QtMoc>
7178
<OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
@@ -87,7 +94,7 @@
8794
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
8895
<ClCompile>
8996
<MultiProcessorCompilation>true</MultiProcessorCompilation>
90-
<PreprocessorDefinitions>UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
97+
<PreprocessorDefinitions>BOOST_ALL_NO_LIB;UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
9198
<AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
9299
<DebugInformationFormat />
93100
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@@ -96,32 +103,34 @@
96103
<Link>
97104
<SubSystem>Windows</SubSystem>
98105
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
99-
<AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
106+
<AdditionalLibraryDirectories>$(ProjectDir)\lib;$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
100107
<GenerateDebugInformation>false</GenerateDebugInformation>
101-
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;%(AdditionalDependencies)</AdditionalDependencies>
108+
<AdditionalDependencies>libboost_regex-vc141-mt-x64-1_67.lib;operator_precedence_analysis.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib</AdditionalDependencies>
109+
<AdditionalOptions>/ENTRY:"mainCRTStartup" %(AdditionalOptions)</AdditionalOptions>
102110
</Link>
103111
<QtMoc>
104112
<OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
105113
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>
106114
<IncludePath>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;%(AdditionalIncludeDirectories)</IncludePath>
107-
<Define>UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions)</Define>
115+
<Define>BOOST_ALL_NO_LIB;UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions)</Define>
116+
<QTDIR>D:\QT\QT\5.9\MSVC2017_64</QTDIR>
108117
</QtMoc>
109118
<QtUic>
110119
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
111120
<OutputFile>.\GeneratedFiles\ui_%(Filename).h</OutputFile>
121+
<QTDIR>D:\QT\QT\5.9\MSVC2017_64</QTDIR>
112122
</QtUic>
113123
<QtRcc>
114124
<ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription>
115125
<OutputFile>.\GeneratedFiles\qrc_%(Filename).cpp</OutputFile>
126+
<QTDIR>D:\QT\QT\5.9\MSVC2017_64</QTDIR>
116127
</QtRcc>
117128
</ItemDefinitionGroup>
118129
<ItemGroup>
119130
<ClCompile Include="AnalysisStep.cpp" />
120131
<ClCompile Include="Config.cpp" />
121-
<ClCompile Include="ExpressionCheck.cpp" />
122132
<ClCompile Include="InputInfo.cpp" />
123133
<ClCompile Include="main.cpp" />
124-
<ClCompile Include="PriorityTable.cpp" />
125134
<ClCompile Include="SyntacticAnalyzer.cpp" />
126135
<ClCompile Include="TableModel.cpp" />
127136
</ItemGroup>
@@ -158,7 +167,6 @@
158167
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName)\.;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;E:\LIB\boost_1_67_0;D:\SDK\dlib-19.4\dlib\external\libpng;D:\SDK\dlib-19.4;D:\SDK\dlib-19.4\dlib\external\zlib;D:\SDK\dlib-19.4\dlib\external\libjpeg;D:\SDK\dlib-19.4\dlib\external\cblas;D:\ffmpeg\ffmpeg-20170117-f7e9275-win64-dev\include</IncludePath>
159168
<Define Condition="'$(Configuration)|$(Platform)'=='Release|x64'">UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;BOOST_ALL_NO_LIB;_CRT_SECURE_NO_WARNINGS;_UNICODE;CPU_ONLY</Define>
160169
</QtMoc>
161-
<ClInclude Include="ExpressionCheck.h" />
162170
<QtMoc Include="InputInfo.h">
163171
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName)\.;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;E:\LIB\boost_1_67_0;D:\SDK\dlib-19.4\dlib\external\libpng;D:\SDK\dlib-19.4;D:\SDK\dlib-19.4\dlib\external\zlib;D:\SDK\dlib-19.4\dlib\external\libjpeg;D:\SDK\dlib-19.4\dlib\external\cblas;D:\ffmpeg\ffmpeg-20170117-f7e9275-win64-dev\include</IncludePath>
164172
<Define Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">BOOST_ALL_NO_LIB;UNICODE;WIN32;WIN64;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;_CRT_SECURE_NO_WARNINGS;_UNICODE;CPU_ONLY</Define>
@@ -169,7 +177,6 @@
169177
<ClInclude Include="GeneratedFiles\ui_Config.h" />
170178
<ClInclude Include="GeneratedFiles\ui_InputInfo.h" />
171179
<ClInclude Include="GeneratedFiles\ui_SyntacticAnalyzer.h" />
172-
<ClInclude Include="PriorityTable.h" />
173180
</ItemGroup>
174181
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
175182
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">

SyntacticAnalyzer/SyntacticAnalyzer/SyntacticAnalyzer.vcxproj.filters

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@
2828
<Extensions>moc;h;cpp</Extensions>
2929
<SourceControlFiles>False</SourceControlFiles>
3030
</Filter>
31-
<Filter Include="include">
32-
<UniqueIdentifier>{69a007d7-05d0-4fb6-b413-b5f953aad87d}</UniqueIdentifier>
33-
</Filter>
3431
</ItemGroup>
3532
<ItemGroup>
3633
<ClCompile Include="main.cpp">
@@ -51,12 +48,6 @@
5148
<ClCompile Include="AnalysisStep.cpp">
5249
<Filter>Source Files</Filter>
5350
</ClCompile>
54-
<ClCompile Include="ExpressionCheck.cpp">
55-
<Filter>include</Filter>
56-
</ClCompile>
57-
<ClCompile Include="PriorityTable.cpp">
58-
<Filter>include</Filter>
59-
</ClCompile>
6051
</ItemGroup>
6152
<ItemGroup>
6253
<QtMoc Include="SyntacticAnalyzer.h">
@@ -95,12 +86,6 @@
9586
</QtRcc>
9687
</ItemGroup>
9788
<ItemGroup>
98-
<ClInclude Include="ExpressionCheck.h">
99-
<Filter>Header Files</Filter>
100-
</ClInclude>
101-
<ClInclude Include="PriorityTable.h">
102-
<Filter>Header Files</Filter>
103-
</ClInclude>
10489
<ClInclude Include="GeneratedFiles\ui_AnalysisStep.h">
10590
<Filter>Generated Files</Filter>
10691
</ClInclude>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
+
2+
-
3+
*
4+
/
5+
(
6+
)
7+
i
8+
9+
E->E+T|E-T|T
10+
T->T*F|T/F|F
11+
F->(E)|i
12+
13+
(i+i*i)*i-i
14+
(i+i*i*i-i
15+
(i+(i*i))/(i-i)
16+
(i+i-i))*i-i
17+
(i+(i*i))i
18+
(i*i)*i
19+
(i*i)(i)+i/ii
20+
21+
22+
+
23+
*
24+
(
25+
)
26+
i
27+
28+
E->E+T|T
29+
T->T*F|F
30+
F->(E)|i
31+
32+
(i+i)*i
33+
(i+i*i
34+
i+i)*i
35+
((i+i)*(i+i))*i
36+
(i+i)i
37+
(i*i)+ii
38+

0 commit comments

Comments
 (0)