Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
L
Lab04
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
CP Lab Group
实验项目模板
Lab04
提交
eca7daf7
提交
eca7daf7
6月 28, 2019
创建
作者:
demo10
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify
上级
2378dafb
流水线
#853
已失败 于阶段
用时 41 秒
变更
9
流水线
1
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
263 行增加
和
5 行删除
+263
-5
.gitignore
.gitignore
+1
-0
.gitlab-ci.yml
.gitlab-ci.yml
+68
-0
RemoveLeftRecursion.cplproj
RemoveLeftRecursion.cplproj
+7
-1
RemoveLeftRecursion.h
RemoveLeftRecursion.h
+4
-3
input1.txt
input1.txt
+2
-0
main.c
main.c
+132
-1
makefile
makefile
+21
-0
output1.txt
output1.txt
+6
-0
sonar-project.properties
sonar-project.properties
+22
-0
没有找到文件。
.gitignore
浏览文件 @
eca7daf7
/Debug
/Release
*.bak
.gitlab-ci.yml
0 → 100644
浏览文件 @
eca7daf7
image
:
"
registry.cn-hangzhou.aliyuncs.com/engintime/ubuntu_16.04_program:latest"
stages
:
-
make
-
code-analysis
-
case1
variables
:
TEACHERCHECK_REPO
:
"
engintime/cp-lab/teachers-packet/Lab004.git"
.codecode-runner
:
&codecode-runner
tags
:
-
ubuntu-16.04
-
short-job
make
:
stage
:
make
<<
:
*codecode-runner
script
:
-
make
-
./app < input1.txt > user_output1.txt
-
execscore.sh 40
only
:
-
master
code-analysis
:
stage
:
code-analysis
<<
:
*codecode-runner
script
:
-
make
-
mkdir -p build
-
cppcheck -v --force --enable=all --xml -I./ ./ 2> ./build/cppcheck-report.xml
-
bash -c 'find ./ -regex ".*\.c\|.*\.h" | vera++ -S -s -d -c ./build/vera-report.xml'
-
valgrind --xml=yes --xml-file=./build/valgrind-report.xml ./app < input1.txt
-
sonar-scanner -Dsonar.projectKey=ProjectKey-$CI_PROJECT_ID -Dsonar.projectName=$CI_PROJECT_NAME -Dsonar.links.homepage=$CI_PROJECT_URL -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_LOGIN -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME -Dsonar.gitlab.project_id=$CI_PROJECT_ID -Dsonar.gitlab.url=$CODECODE_PROTOCOL$CODECODE_DOMAIN
allow_failure
:
true
only
:
-
master
case1
:
stage
:
case1
<<
:
*codecode-runner
script
:
-
make
-
./app < input1.txt > user_output1.txt
-
diff output1.txt user_output1.txt -b -B -y -i --suppress-common-lines
-
execscore.sh 50
only
:
-
master
teacher-check1
:
stage
:
case1
<<
:
*codecode-runner
script
:
-
make
-
./app < input1.txt
-
git clone ${CODECODE_PROTOCOL}gitlab-ci-token:${CI_JOB_TOKEN}@${CODECODE_DOMAIN}/${CI_PROJECT_FORKSOURCE} template
-
diff template/.gitlab-ci.yml .gitlab-ci.yml -b -B -y -i --suppress-common-lines
-
diff template/input1.txt input1.txt -b -B -y -i --suppress-common-lines
-
diff template/output1.txt output1.txt -b -B -y -i --suppress-common-lines
-
fileidentity.sh
-
git clone ${CODECODE_PROTOCOL}gitlab-ci-token:${CI_JOB_TOKEN}@${CODECODE_DOMAIN}/${TEACHERCHECK_REPO} teacher_check
-
./app < teacher_check/input1.txt > user_output1.txt
-
diff teacher_check/output1.txt user_output1.txt -b -B -y -i --suppress-common-lines
-
extracase.sh
only
:
-
master
when
:
manual
allow_failure
:
true
RemoveLeftRecursion.cplproj
浏览文件 @
eca7daf7
...
...
@@ -4,7 +4,7 @@
<Configuration
Name=
"Debug"
>
<Tool
Name=
"PreBuildEventTool"
/>
<Tool
Name=
"CustomBuildTool"
/>
<Tool
Name=
"GCCCompilerTool"
PreprocessorDefinitions=
"_DEBUG"
GenerateDebugInformation=
"-1"
AdditionalOptions=
""
/>
<Tool
Name=
"GCCCompilerTool"
PreprocessorDefinitions=
"_DEBUG"
GenerateDebugInformation=
"-1"
AdditionalOptions=
"
-std=c99
"
/>
<Tool
Name=
"PreLinkEventTool"
/>
<Tool
Name=
"GCCLinkerTool"
AdditionalDependencies=
""$(CPLInstallDir)Dump\lib\RemoveLeftRecursionNoReplace_Demo.o""
/>
<Tool
Name=
"PostBuildEventTool"
/>
...
...
@@ -33,5 +33,11 @@
<File
RelativePath=
".\main.c"
>
</File>
</Filter>
<File
RelativePath=
".\input1.txt"
>
</File>
<File
RelativePath=
".\makefile"
>
</File>
<File
RelativePath=
".\output1.txt"
>
</File>
</Files>
</OSLProject>
RemoveLeftRecursion.h
浏览文件 @
eca7daf7
#ifndef
_
REMOVELEFTRECURSIONNOREPLACE_H_
#define
_
REMOVELEFTRECURSIONNOREPLACE_H_
#ifndef REMOVELEFTRECURSIONNOREPLACE_H_
#define REMOVELEFTRECURSIONNOREPLACE_H_
//
...
...
@@ -43,6 +43,7 @@ typedef struct _Rule{
//
Rule
*
InitRules
();
Rule
*
InitRules_CI
();
Rule
*
CreateRule
(
const
char
*
pRuleName
);
RuleSymbol
*
CreateSymbol
();
Rule
*
FindRule
(
Rule
*
pHead
,
const
char
*
RuleName
);
...
...
@@ -62,5 +63,5 @@ extern const char* VoidSymbol;
extern
const
char
*
Postfix
;
#endif
/*
_
REMOVELEFTRECURSIONNOREPLACE_H_ */
#endif
/* REMOVELEFTRECURSIONNOREPLACE_H_ */
input1.txt
0 → 100644
浏览文件 @
eca7daf7
A -> Aa | bA | c | Ad
\ No newline at end of file
main.c
浏览文件 @
eca7daf7
#include "RemoveLeftRecursion.h"
#include <string.h>
#include <stdlib.h>
const
char
*
VoidSymbol
=
"$"
;
// "ε"
const
char
*
Postfix
=
"'"
;
char
rule_table_ci
[
20
][
256
];
char
ruleNameArr
[
20
][
64
];
int
main
(
int
argc
,
char
*
argv
[])
{
//
// 调用 InitRules 函数初始化文法
//
//
#ifdef CODECODE_CI
Rule
*
pHead
=
InitRules_CI
();
#else
Rule
*
pHead
=
InitRules
();
#endif
//
// 输出消除左递归之前的文法
...
...
@@ -113,6 +121,13 @@ static const RULE_ENTRY rule_table[] =
}
};
/*
功能:
初始化文法链表。
返回值:
文法的头指针。
*/
Rule
*
InitRules
()
{
Rule
*
pHead
,
*
pRule
;
...
...
@@ -168,6 +183,122 @@ Rule* InitRules()
/*
功能:
初始化文法链表(在执行流水线时调用)。
返回值:
文法的头指针。
*/
Rule
*
InitRules_CI
()
{
/* A -> Aa | bA | c | Ad */
int
nRuleCount
=
0
;
for
(
int
i
=
0
;
i
<
20
;
i
++
)
{
gets
(
rule_table_ci
[
i
]);
int
length
=
strlen
(
rule_table_ci
[
i
]);
if
(
length
==
0
)
{
break
;
}
for
(
int
j
=
0
;
j
<
length
;
j
++
)
{
if
(
rule_table_ci
[
i
][
j
]
==
' '
)
{
ruleNameArr
[
i
][
j
]
=
'\0'
;
break
;
}
ruleNameArr
[
i
][
j
]
=
rule_table_ci
[
i
][
j
];
}
nRuleCount
++
;
}
Rule
*
pHead
,
*
pRule
;
RuleSymbol
**
pSymbolPtr1
,
**
pSymbolPtr2
;
int
i
,
j
,
k
;
Rule
**
pRulePtr
=
&
pHead
;
for
(
i
=
0
;
i
<
nRuleCount
;
i
++
)
{
*
pRulePtr
=
CreateRule
(
ruleNameArr
[
i
]);
pRulePtr
=
&
(
*
pRulePtr
)
->
pNextRule
;
}
pRule
=
pHead
;
for
(
i
=
0
;
i
<
nRuleCount
;
i
++
)
{
pSymbolPtr1
=
&
pRule
->
pFirstSymbol
;
int
start
=
0
;
for
(
int
j
=
0
;
rule_table_ci
[
i
][
j
]
!=
'\0'
;
j
++
)
{
if
(
rule_table_ci
[
i
][
j
]
==
' '
&&
rule_table_ci
[
i
][
j
+
1
]
==
'-'
&&
rule_table_ci
[
i
][
j
+
2
]
==
'>'
&&
rule_table_ci
[
i
][
j
+
3
]
==
' '
)
{
start
=
j
+
4
;
break
;
}
}
for
(
k
=
start
;
rule_table_ci
[
i
][
k
]
!=
'\0'
;
k
++
)
{
if
(
rule_table_ci
[
i
][
k
]
==
'|'
)
{
pSymbolPtr1
=
&
(
*
pSymbolPtr1
)
->
pOther
;
pSymbolPtr2
=
pSymbolPtr1
;
continue
;
}
if
(
rule_table_ci
[
i
][
k
]
==
' '
)
{
continue
;
}
if
(
k
==
start
)
{
pSymbolPtr2
=
pSymbolPtr1
;
}
*
pSymbolPtr2
=
CreateSymbol
();
char
tokenName
[
MAX_STR_LENGTH
]
=
{};
tokenName
[
0
]
=
rule_table_ci
[
i
][
k
];
tokenName
[
1
]
=
'\0'
;
(
*
pSymbolPtr2
)
->
isToken
=
1
;
for
(
int
m
=
0
;
m
<
nRuleCount
;
m
++
)
{
if
(
strcmp
(
tokenName
,
ruleNameArr
[
m
])
==
0
)
{
(
*
pSymbolPtr2
)
->
isToken
=
0
;
(
*
pSymbolPtr2
)
->
pRule
=
FindRule
(
pHead
,
tokenName
);
if
(
NULL
==
(
*
pSymbolPtr2
)
->
pRule
)
{
printf
(
"Init rules error, miss rule
\"
%s
\"\n
"
,
tokenName
);
exit
(
1
);
}
}
}
if
((
*
pSymbolPtr2
)
->
isToken
==
1
)
{
strcpy
((
*
pSymbolPtr2
)
->
TokenName
,
tokenName
);
}
pSymbolPtr2
=
&
(
*
pSymbolPtr2
)
->
pNextSymbol
;
}
pRule
=
pRule
->
pNextRule
;
}
return
pHead
;
}
/*
功能:
创建一个新的 Rule。
参数:
...
...
makefile
0 → 100644
浏览文件 @
eca7daf7
DIR_INC
=
.
DIR_SRC
=
.
DIR_OBJ
=
.
DIR_BIN
=
.
SRC
=
$
(
wildcard
${
DIR_SRC
}
/
*
.c
)
OBJ
=
$
(
patsubst %.c,
${
DIR_OBJ
}
/%.o,
$
(
notdir
${
SRC
}
))
TARGET
=
app
BIN_TARGET
=
${
DIR_BIN
}
/
${
TARGET
}
CC
=
gcc
CFLAGS
=
-g
-w
-fmax-errors
=
10
-std
=
c99
-fsigned-char
-I
${
DIR_INC
}
-D
CODECODE_CI
${BIN_TARGET}
:
${OBJ}
$(CC)
$(OBJ)
-o
$@
${DIR_OBJ}/%.o
:
${DIR_SRC}/%.c
$(CC)
$(CFLAGS)
-c
$<
-o
$@
\ No newline at end of file
output1.txt
0 → 100644
浏览文件 @
eca7daf7
Before Remove Left Recursion:
A->Aa|bA|c|Ad
After Remove Left Recursion:
A->bAA'|cA'
A'->aA'|dA'|$
sonar-project.properties
0 → 100644
浏览文件 @
eca7daf7
# required metadata
sonar.language
=
c
# path to source directories (required)
sonar.sources
=
./
# path to the build artifact
sonar.artifact.path
=
build/app
# paths to the reports
sonar.c.cppcheck.reportPath
=
./build/cppcheck-report.xml
#sonar.c.pclint.reportPath=./build/pclint-report.xml
#sonar.c.coverage.reportPath=./build/gcovr-report*.xml
#sonar.c.coverage.itReportPath=./build/gcovr-report*.xml
#sonar.c.coverage.overallReportPath=./build/gcovr-report*.xml
sonar.c.valgrind.reportPath
=
./build/valgrind-report.xml
sonar.c.vera.reportPath
=
./build/vera-report.xml
#sonar.c.rats.reportPath=./build/rats-report.xml
#sonar.c.xunit.reportPath=./build/xunit-report.xml
#sonar.c.drmemory.reportPath=./build/drmemory-logs/**/results.txt
sonar.c.includeDirectories
=
/usr/include/,/usr/include/linux,/usr/include/x86_64-linux-gnu/bits,/usr/include/x86_64-linux-gnu/sys,/usr/include/c++/5/tr1,./
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论