Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,4 @@ target_wrapper.*

# QtCreator CMake
CMakeLists.txt.user*
/SyntacticAnalyzer/.vs/SyntacticAnalyzer/v15/Browse.VC.db
7 changes: 2 additions & 5 deletions SyntacticAnalyzer/SyntacticAnalyzer/AnalysisStep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ void AnalysisStep::add_step(map<int, vector<string>> setp) {
int col = 0;
for (it; it != end; it++) {
int size = it->second.size();
//qDebug() << "size=" << QString("%1").arg(size);
//setp_model->setHeaderData(row, Qt::Vertical, QString("%1").arg(it->first));
col = 0;
setp_model->setItem(row, col, new QStandardItem(QString("%1").arg(it->first)));
str_it = it->second.begin();
Expand All @@ -42,12 +40,11 @@ AnalysisStep::~AnalysisStep() {
}

void AnalysisStep::init_table() {
setp_model->setColumnCount(5);
//setp_model->setHeaderData(0, Qt::Horizontal, QString::fromLocal8Bit("����"));
setp_model->setColumnCount(5);;
setp_model->setHeaderData(0, Qt::Horizontal, QString::fromLocal8Bit("����ջ״̬"));
setp_model->setHeaderData(1, Qt::Horizontal, QString::fromLocal8Bit("��ϵ"));
setp_model->setHeaderData(2, Qt::Horizontal, QString::fromLocal8Bit("���봮״̬"));
setp_model->setHeaderData(3, Qt::Horizontal, QString::fromLocal8Bit("����ض���"));
setp_model->setHeaderData(3, Qt::Horizontal, QString::fromLocal8Bit("����ض���"));
setp_model->setHeaderData(4, Qt::Horizontal, QString::fromLocal8Bit("����"));
ui.setp_table->setModel(setp_model);
ui.setp_table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
Expand Down
26 changes: 19 additions & 7 deletions SyntacticAnalyzer/SyntacticAnalyzer/SyntacticAnalyzer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -553,27 +553,39 @@ void SyntacticAnalyzer::check_expression(string exp, int record_index) {
map<int, string> error = exp_check.get_error();
map<int, string>::iterator it = error.begin();
map<int, string>::iterator end = error.end();
bool flag = true;
QString error_info = "";
if (error.empty()) //����ʽ���ɳ�����
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)));
else
ui.output_text->append(QString::fromStdString(exp));
for (it; it != end; it++) {
flag = false;
qDebug() << QString::fromStdString(exp);
for (it; it != end; it++) { //��������

QTextCursor cursor(ui.output_text->document());
QTextCursor cursor_postion(ui.output_text->textCursor());
QTextCharFormat color_format;
color_format.setForeground(Qt::red);
int postion = cursor_postion.position() - (exp.length() - it->first);
cursor.setPosition(postion, QTextCursor::KeepAnchor);
cursor.movePosition(QTextCursor::NoMove, QTextCursor::KeepAnchor, 1);
cursor.setPosition(postion - 1, QTextCursor::MoveAnchor);
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 0);
cursor.insertText(" ");
cursor.setPosition(postion + 1, QTextCursor::MoveAnchor);
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 0);
cursor.insertText(" ");
postion = cursor_postion.position() - (exp.length() + 2 - it->first);
cursor.setPosition(postion, QTextCursor::MoveAnchor);
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 1);
cursor.select(QTextCursor::WordUnderCursor);
cursor.setCharFormat(color_format);
cursor.mergeCharFormat(color_format);
//ȥ���ո�
cursor.setPosition(postion - 1, QTextCursor::MoveAnchor);
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 0);
cursor.deleteChar();
cursor.setPosition(postion, QTextCursor::MoveAnchor);
cursor.movePosition(QTextCursor::NoMove, QTextCursor::MoveAnchor, 0);
cursor.deleteChar();
}
for (it = error.begin(); it != end; it++) { //�����¼���ɳ�����
flag = false;

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())));
}
Expand Down
2 changes: 2 additions & 0 deletions SyntacticAnalyzer/SyntacticAnalyzer/SyntacticAnalyzer.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
#include <QUrlQuery>
#include <QMessageBox>
using namespace std;


class SyntacticAnalyzer : public QMainWindow {
Q_OBJECT

Expand Down
29 changes: 18 additions & 11 deletions SyntacticAnalyzer/SyntacticAnalyzer/SyntacticAnalyzer.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,16 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<LibraryPath>D:\QT\QT\5.9\MSVC2017_64\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64</LibraryPath>
<LibraryPath>$(ProjectDir)\lib;D:\QT\QT\5.9\MSVC2017_64\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64</LibraryPath>
<IncludePath>$(ProjectDir)\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
<ExecutablePath>$(ProjectDir)\lib;$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(FxCopDir);$(PATH);</ExecutablePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<LibraryPath>$(ProjectDir)\lib;D:\QT\QT\5.9\MSVC2017_64\lib;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64</LibraryPath>
<IncludePath>D:\QT\QT\5.9\MSVC2017_64;$(ProjectDir)\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
<ReferencePath>$(VC_ReferencesPath_x64);D:\QT\QT\5.9\MSVC2017_64</ReferencePath>
<ExecutablePath>$(ProjectDir)\lib;$(VC_ExecutablePath_x64);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(FxCopDir);$(PATH);</ExecutablePath>
</PropertyGroup>
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
<Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
Expand Down Expand Up @@ -63,9 +69,10 @@
<Link>
<SubSystem>Windows</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>$(ProjectDir)\lib;$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<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>
<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>
<AdditionalOptions>/ENTRY:"mainCRTStartup" %(AdditionalOptions)</AdditionalOptions>
</Link>
<QtMoc>
<OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
Expand All @@ -87,7 +94,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<PreprocessorDefinitions>UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<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>
<AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat />
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
Expand All @@ -96,32 +103,34 @@
<Link>
<SubSystem>Windows</SubSystem>
<OutputFile>$(OutDir)\$(ProjectName).exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>$(ProjectDir)\lib;$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>libboost_regex-vc141-mt-x64-1_67.lib;operator_precedence_analysis.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib</AdditionalDependencies>
<AdditionalOptions>/ENTRY:"mainCRTStartup" %(AdditionalOptions)</AdditionalOptions>
</Link>
<QtMoc>
<OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>
<IncludePath>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;%(AdditionalIncludeDirectories)</IncludePath>
<Define>UNICODE;WIN32;WIN64;QT_DLL;QT_NO_DEBUG;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions)</Define>
<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>
<QTDIR>D:\QT\QT\5.9\MSVC2017_64</QTDIR>
</QtMoc>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<OutputFile>.\GeneratedFiles\ui_%(Filename).h</OutputFile>
<QTDIR>D:\QT\QT\5.9\MSVC2017_64</QTDIR>
</QtUic>
<QtRcc>
<ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription>
<OutputFile>.\GeneratedFiles\qrc_%(Filename).cpp</OutputFile>
<QTDIR>D:\QT\QT\5.9\MSVC2017_64</QTDIR>
</QtRcc>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="AnalysisStep.cpp" />
<ClCompile Include="Config.cpp" />
<ClCompile Include="ExpressionCheck.cpp" />
<ClCompile Include="InputInfo.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="PriorityTable.cpp" />
<ClCompile Include="SyntacticAnalyzer.cpp" />
<ClCompile Include="TableModel.cpp" />
</ItemGroup>
Expand Down Expand Up @@ -158,7 +167,6 @@
<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>
<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>
</QtMoc>
<ClInclude Include="ExpressionCheck.h" />
<QtMoc Include="InputInfo.h">
<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>
<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>
Expand All @@ -169,7 +177,6 @@
<ClInclude Include="GeneratedFiles\ui_Config.h" />
<ClInclude Include="GeneratedFiles\ui_InputInfo.h" />
<ClInclude Include="GeneratedFiles\ui_SyntacticAnalyzer.h" />
<ClInclude Include="PriorityTable.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@
<Extensions>moc;h;cpp</Extensions>
<SourceControlFiles>False</SourceControlFiles>
</Filter>
<Filter Include="include">
<UniqueIdentifier>{69a007d7-05d0-4fb6-b413-b5f953aad87d}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
Expand All @@ -51,12 +48,6 @@
<ClCompile Include="AnalysisStep.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ExpressionCheck.cpp">
<Filter>include</Filter>
</ClCompile>
<ClCompile Include="PriorityTable.cpp">
<Filter>include</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="SyntacticAnalyzer.h">
Expand Down Expand Up @@ -95,12 +86,6 @@
</QtRcc>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ExpressionCheck.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="PriorityTable.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="GeneratedFiles\ui_AnalysisStep.h">
<Filter>Generated Files</Filter>
</ClInclude>
Expand Down
38 changes: 38 additions & 0 deletions SyntacticAnalyzer/SyntacticAnalyzer/TestCase.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
+
-
*
/
(
)
i

E->E+T|E-T|T
T->T*F|T/F|F
F->(E)|i

(i+i*i)*i-i
(i+i*i*i-i
(i+(i*i))/(i-i)
(i+i-i))*i-i
(i+(i*i))i
(i*i)*i
(i*i)(i)+i/ii


+
*
(
)
i

E->E+T|T
T->T*F|F
F->(E)|i

(i+i)*i
(i+i*i
i+i)*i
((i+i)*(i+i))*i
(i+i)i
(i*i)+ii

Loading