passlab / ompparser

ompparser: A Standalone and Unified OpenMP Parser
https://github.com/passlab/ompparser
Other
5 stars 1 forks source link

OpenMP Syntax Checking #52

Open yanyh15 opened 5 years ago

yanyh15 commented 5 years ago

OpenMP has lots of restrictions and rules in each directive and clause. A full syntax checking requires detailed work for each directive and clause. I am proposing that we apply the following strategies:

  1. If we can use the lexer and grammar rules to apply restrictions and rules that are straightforward, we will use lexer and grammar rules
  2. For more complicated checking that involve only one clause type, e.g. syntax checking can be performed when adding the clause information to the directive object. E.g. single-use restriction for if, num_threads, ... clauses can be checked when adding the clause.
  3. For those checking that needs to involve multiple clauses and can only be performed after the whole directive is parsed, we will need to do that after parsing the whole directive. E.g. the use of if and other clauses in the combined directive, a clause that must exist for a directive.
  4. Syntax checking that involves language-specific expression and identifiers are very limited due to the nature of the parser. The simple checking can be done is to check whether two variables are used in two places that are conflict, e.g. shared(avar) private(avar). This is incorrect use of avar and can be checked by simply comparing the strings of the occurence of the variable.
  5. Full semantics checking should be done by the integrating compiler
chunhualiao commented 5 years ago

@yanyh15 I think this is best to be done on top of ROSE's OpenMP AST, which has all the info. you need for semantics checking. Otherwise, you have to encode hierarchical info in your parser's AST first.

yanyh15 commented 5 years ago

@chunhualiao I updated the issue, I think i meant syntax checking, though there are some semantics restriction in the spec for some directives.

For OpenMP syntax checking, this should be done in ompparser. I would like ompparser to have capability of checking the restrictions and rules applied by the language spec. After parsed successfully by ompparser, it is a legal OpenMP directive, thus requiring no checking from the integrating compiler. Semantics checking by the compiler will be much simpler as well.