Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

An argument called "final" generates a parsing error #410

Closed
iwill80 opened this issue Jan 30, 2015 · 3 comments · Fixed by #449
Closed

An argument called "final" generates a parsing error #410

iwill80 opened this issue Jan 30, 2015 · 3 comments · Fixed by #449
Assignees
Labels
Milestone

Comments

@iwill80
Copy link

iwill80 commented Jan 30, 2015

Hello,
I'm using cxx plugin version 0.9.2 and I found a strange parsing error analyzing. After many attempts I found that the error was caused by an argument called "final". For example, if you have a C function declared as follow:

int foo(int final);

it will produce the following error:

14:12:03.079 ERROR - Unable to parse file: xxx
com.sonar.sslr.api.RecognitionException: Parse error at line 715 column 8 failed to match all of: templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName operatorFunctionId literalOperatorId operatorFunctionId conversionFunctionId literalOperatorId ptrDeclarator templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName operatorFunctionId literalOperatorId operatorFunctionId conversionFunctionId literalOperatorId declarator functionDefinition templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName operatorFunctionId literalOperatorId operatorFunctionId conversionFunctionId literalOperatorId ptrDeclarator templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName templateName templateName enumName typedefName originalNamespaceName namespaceAlias decltypeSpecifier templateName operatorFunctionId literalOperatorId operatorFunctionId conversionFunctionId literalOperatorId declarator initDeclarator initDeclaratorList
...
714:
--> int foo(int final);
716:
...
Failed at rules:
/-templateName
/-simpleTemplateId
| /-templateName
| /-simpleTemplateId
+-className
+-enumName
+-typedefName
/-typeName
| /-originalNamespaceName
| +-namespaceAlias
+-namespaceName
+-decltypeSpecifier
/-nestedNameSpecifier
/-ptrOperator
| /-templateName
| /-simpleTemplateId
| | /-templateName
| | /-simpleTemplateId
| +-className
| +-enumName
| +-typedefName
| /-typeName
| | /-originalNamespaceName
| | +-namespaceAlias
| +-namespaceName
| +-decltypeSpecifier
| /-nestedNameSpecifier
| | /-templateName
| | /-simpleTemplateId
| +-className
| | /-templateName
| | /-simpleTemplateId
| | | /-templateName
| | | /-simpleTemplateId
| | +-className
| | +-enumName
| | +-typedefName
| | /-typeName
| | | /-originalNamespaceName
| | | +-namespaceAlias
| | +-namespaceName
| | +-decltypeSpecifier
| | /-nestedNameSpecifier
| | /-qualifiedId
| | | /-templateName
| | | /-simpleTemplateId
| | | +-operatorFunctionId
| | | +-literalOperatorId
| | | /-templateId
| | | +-operatorFunctionId
| | | +-conversionFunctionId
| | | +-literalOperatorId
| | +-unqualifiedId
| +-idExpression
| /-declaratorId
+-noptrDeclarator
/-ptrDeclarator
/-noptrDeclarator consumed from (715, 7) to (715, 8): (
/-ptrDeclarator
+-ptrDeclarator consumed from (715, 7) to (715, 8): (
| /-templateName
| /-simpleTemplateId
| | /-templateName
| | /-simpleTemplateId
| +-className
| +-enumName
| +-typedefName
| /-typeName
| | /-originalNamespaceName
| | +-namespaceAlias
| +-namespaceName
| +-decltypeSpecifier
| /-nestedNameSpecifier
| /-ptrOperator
| | /-templateName
| | /-simpleTemplateId
| | | /-templateName
| | | /-simpleTemplateId
| | +-className
| | +-enumName
| | +-typedefName
| | /-typeName
| | | /-originalNamespaceName
| | | +-namespaceAlias
| | +-namespaceName
| | +-decltypeSpecifier
| | /-nestedNameSpecifier
| | | /-templateName
| | | /-simpleTemplateId
| | +-className
| | | /-templateName
| | | /-simpleTemplateId
| | | | /-templateName
| | | | /-simpleTemplateId
| | | +-className
| | | +-enumName
| | | +-typedefName
| | | /-typeName
| | | | /-originalNamespaceName
| | | | +-namespaceAlias
| | | +-namespaceName
| | | +-decltypeSpecifier
| | | /-nestedNameSpecifier
| | | /-qualifiedId
| | | | /-templateName
| | | | /-simpleTemplateId
| | | | +-operatorFunctionId
| | | | +-literalOperatorId
| | | | /-templateId
| | | | +-operatorFunctionId
| | | | +-conversionFunctionId
| | | | +-literalOperatorId
| | | +-unqualifiedId
| | +-idExpression
| | /-declaratorId
| +-noptrDeclarator
| /-ptrDeclarator
+-noptrDeclarator consumed from (715, 7) to (715, 8): (
/-declarator
+-declarator consumed from (715, 7) to (715, 8): (
/-functionDefinition consumed from (715, 0) to (715, 7): int foo
+-functionDefinition consumed from (715, 0) to (715, 8): int foo (
| /-templateName
| /-simpleTemplateId
| | /-templateName
| | /-simpleTemplateId
| +-className
| +-enumName
| +-typedefName
| /-typeName
| | /-originalNamespaceName
| | +-namespaceAlias
| +-namespaceName
| +-decltypeSpecifier
| /-nestedNameSpecifier
| /-ptrOperator
| | /-templateName
| | /-simpleTemplateId
| | | /-templateName
| | | /-simpleTemplateId
| | +-className
| | +-enumName
| | +-typedefName
| | /-typeName
| | | /-originalNamespaceName
| | | +-namespaceAlias
| | +-namespaceName
| | +-decltypeSpecifier
| | /-nestedNameSpecifier
| | | /-templateName
| | | /-simpleTemplateId
| | +-className
| | | /-templateName
| | | /-simpleTemplateId
| | | | /-templateName
| | | | /-simpleTemplateId
| | | +-className
| | | +-enumName
| | | +-typedefName
| | | /-typeName
| | | | /-originalNamespaceName
| | | | +-namespaceAlias
| | | +-namespaceName
| | | +-decltypeSpecifier
| | | /-nestedNameSpecifier
| | | /-qualifiedId
| | | | /-templateName
| | | | /-simpleTemplateId
| | | | +-operatorFunctionId
| | | | +-literalOperatorId
| | | | /-templateId
| | | | +-operatorFunctionId
| | | | +-conversionFunctionId
| | | | +-literalOperatorId
| | | +-unqualifiedId
| | +-idExpression
| | /-declaratorId
| +-noptrDeclarator
| /-ptrDeclarator
| /-noptrDeclarator consumed from (715, 7) to (715, 8): (
| /-ptrDeclarator
| +-ptrDeclarator consumed from (715, 7) to (715, 8): (
| | /-templateName
| | /-simpleTemplateId
| | | /-templateName
| | | /-simpleTemplateId
| | +-className
| | +-enumName
| | +-typedefName
| | /-typeName
| | | /-originalNamespaceName
| | | +-namespaceAlias
| | +-namespaceName
| | +-decltypeSpecifier
| | /-nestedNameSpecifier
| | /-ptrOperator
| | | /-templateName
| | | /-simpleTemplateId
| | | | /-templateName
| | | | /-simpleTemplateId
| | | +-className
| | | +-enumName
| | | +-typedefName
| | | /-typeName
| | | | /-originalNamespaceName
| | | | +-namespaceAlias
| | | +-namespaceName
| | | +-decltypeSpecifier
| | | /-nestedNameSpecifier
| | | | /-templateName
| | | | /-simpleTemplateId
| | | +-className
| | | | /-templateName
| | | | /-simpleTemplateId
| | | | | /-templateName
| | | | | /-simpleTemplateId
| | | | +-className
| | | | +-enumName
| | | | +-typedefName
| | | | /-typeName
| | | | | /-originalNamespaceName
| | | | | +-namespaceAlias
| | | | +-namespaceName
| | | | +-decltypeSpecifier
| | | | /-nestedNameSpecifier
| | | | /-qualifiedId
| | | | | /-templateName
| | | | | /-simpleTemplateId
| | | | | +-operatorFunctionId
| | | | | +-literalOperatorId
| | | | | /-templateId
| | | | | +-operatorFunctionId
| | | | | +-conversionFunctionId
| | | | | +-literalOperatorId
| | | | +-unqualifiedId
| | | +-idExpression
| | | /-declaratorId
| | +-noptrDeclarator
| | /-ptrDeclarator
| +-noptrDeclarator consumed from (715, 7) to (715, 8): (
| /-declarator
| +-declarator consumed from (715, 7) to (715, 8): (
| /-initDeclarator
| +-initDeclarator consumed from (715, 7) to (715, 8): (
| /-initDeclaratorList
| +-initDeclaratorList consumed from (715, 7) to (715, 8): (
| /-simpleDeclaration consumed from (715, 0) to (715, 7): int foo
+-blockDeclaration
/-declaration
declarationSeq consumed from (115, 0) to (713, 19): ... , hpn_timestamp_t * f , const char flag ) ;
linkageSpecification consumed from (108, 3) to (108, 15): extern "C" {
declaration
translationUnit

at org.sonar.sslr.internal.vm.Machine.parse(Machine.java:86) ~[sslr-core-1.19.2.jar:na]
at com.sonar.sslr.impl.Parser.parse(Parser.java:87) ~[sslr-core-1.19.2.jar:na]
at com.sonar.sslr.impl.Parser.parse(Parser.java:72) ~[sslr-core-1.19.2.jar:na]
at com.sonar.sslr.squid.AstScanner.scanFiles(AstScanner.java:92) ~[sslr-squid-bridge-2.3.jar:na]
at org.sonar.plugins.cxx.squid.CxxSquidSensor.analyse(CxxSquidSensor.java:96) [sonar-cxx-plugin-0.9.1.jar:na]
at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:79) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:70) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:119) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:194) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:233) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:228) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:221) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:64) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:51) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:125) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:93) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:78) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.bootstrap.BootstrapContainer.executeTask(BootstrapContainer.java:173) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67) [sonar-batch-maven-compat-4.5.2.jar:na]
at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48) [sonar-runner-batch7922701449330401015.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_20]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_20]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_20]
at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_20]
at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87) [sonar-runner-dist-2.4.jar:na]
at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75) [sonar-runner-dist-2.4.jar:na]
at java.security.AccessController.doPrivileged(Native Method) [na:1.8.0_20]
at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69) [sonar-runner-dist-2.4.jar:na]
at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50) [sonar-runner-dist-2.4.jar:na]
at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102) [sonar-runner-dist-2.4.jar:na]
at org.sonar.runner.api.Runner.execute(Runner.java:100) [sonar-runner-dist-2.4.jar:na]
at org.sonar.runner.Main.executeTask(Main.java:70) [sonar-runner-dist-2.4.jar:na]
at org.sonar.runner.Main.execute(Main.java:59) [sonar-runner-dist-2.4.jar:na]
at org.sonar.runner.Main.main(Main.java:53) [sonar-runner-dist-2.4.jar:na]

If you just rename the argument into _final no error will be find.

@guwirth
Copy link
Collaborator

guwirth commented Jan 30, 2015

final is a C++ keyword: http://en.cppreference.com/w/cpp/language/final
Parser/plugin is mainly a C++ parser.

See sonar.cxx.cFilesPatterns for more C compatibility.

@iwill80
Copy link
Author

iwill80 commented Jan 30, 2015

Same issue configuring file patterns as follow:

sonar.cxx.cFilesPatterns=.c,.h

Il giorno 30/gen/2015, alle ore 15:44, "Günter Wirth" notifications@github.com ha scritto:

final is a C++ keyword: http://en.cppreference.com/w/cpp/language/final
Parser/plugin is mainly a C++ parser.

See sonar.cxx.cFilesPatterns for more C compatibility.


Reply to this email directly or view it on GitHub.

@guwirth
Copy link
Collaborator

guwirth commented Feb 22, 2015

Feature was added with #291. Looking to the sources keyword final is not supported by the solution.

https://github.com/wenns/sonar-cxx/blob/79894beea01bd829275c8c6e5502855bcf063cb1/cxx-squid/src/main/java/org/sonar/cxx/preprocessor/StandardDefinitions.java

public static Map<String, String> compatibilityMacros()

@guwirth guwirth added bug and removed question labels Apr 9, 2015
@guwirth guwirth added this to the M 0.9.3 milestone Apr 9, 2015
guwirth added a commit that referenced this issue Apr 10, 2015
An argument called "final" generates a parsing error #410
@guwirth guwirth self-assigned this Apr 17, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

Successfully merging a pull request may close this issue.

2 participants