Iam尝试使用lex和yacc开发计算器程序。我一直收到以下错误:
calc.y: warning: 5 nonterminals useless in grammar [-Wother]
calc.y: warning: 8 rules useless in grammar [-Wother]
calc.y:8.1: fatal error: start symbol I does not derive any sentence
I : E '\n' {printf("%d\n",$1);}
我看了类似的问题,但他们有无限的递归,但这个没有。
calc.l
%{
#include"y.tab.h"
%}
digits [0-9]*
%%
{digits} {return DIGITS}
%%
int yywrap()
{
}
calc.y
%{
#include<stdio.h>
%}
%token DIGITS
%%
I : E '\n' {printf("%d\n",$1);}
;
E : E '+' F {$$ = $1 + $3;}
| E '-' F {$$ = $1 - $3;}
;
F : F '*' G {$$ = $1 * $3;}
| F '/' G {$$ = $1 / $3;}
G :'('E')'
| DIGITS
;
%%
int main()
{
yyparse();
}
int yyerror()
{
}
答案 0 :(得分:3)
我不知道yacc,但是:
要构建I
,您需要E
:
I : E '\n'
要构建E
,您需要E
:
E : E '+' F
| E '-' F
由于如果您还没有E
,就无法构建I
(并且在开始时您没有任何内容),则无法构建E
1}}要么。
或者从另一方面看它:DIGITS
是无限递归的,因为它总是引用自身。
如果我们从词法分析器开始,我们首先得到DIGITS
。
G
可用于构建G
。
但我们无法对F '*' G
执行任何操作,因为使用它的唯一规则(F '/' G
和F
)也需要F
才能继续,我们没有 ******************************************************************************
Starting task: NuGet Publisher
******************************************************************************
Set workingFolder to default: C:\BuildSystem\TfsAgent\tasks\NuGetPublisher\0.2.21
C:\Windows\system32\chcp.com 65001
Active code page: 65001
Detected NuGet version 3.3.0.212 / 3.3.0
SYSTEMVSSCONNECTION exists true
C:\BuildSystem\TfsAgent\tasks\NuGetPublisher\0.2.21\node_modules\nuget-task-common\NuGet\3.3.0\NuGet.exe push -NonInteractive C:\BuildSystem\TfsAgent\_work\6\s\myfolderPackage\bin\Release\mypackage.1.16.1905.nupkg -Source HunextPackages -ApiKey VSTS
Pushing mypackage 1.16.1905 to 'https://mytfsurl.com:444/tfs/DefaultCollection/_packaging/9ebd459f-9a02-456e-9243-c8d0f989c871/nuget/v2/'...
Failed to process request. 'Conflict'.
The remote server returned an error: (409) Conflict..
Error: C:\BuildSystem\TfsAgent\tasks\NuGetPublisher\0.2.21\node_modules\nuget-task-common\NuGet\3.3.0\NuGet.exe failed with return code: 1
Packages failed to publish
******************************************************************************
Finishing task: NuGetPublisher
******************************************************************************
System.Exception: Task NuGetPublisher failed. This caused the job to fail. Look at the logs for the task for more details.
at Microsoft.TeamFoundation.DistributedTask.Worker.JobRunner.Run(IJobContext jobContext, IJobRequest job, IJobExtension jobExtension, CancellationTokenSource tokenSource)
Worker Worker-bbe2b68d-3dfb-4b56-8546-bc2935a3ffe1 finished running job bbe2b68d-3dfb-4b56-8546-bc2935a3ffe1
******************************************************************************
Finishing Build
******************************************************************************
。所以我们陷入困境。