Antlr Protbuf Grammar не распознает, если зарезервированное слово в типе - PullRequest
0 голосов
/ 02 декабря 2019
syntax = "proto3";
package statustest;

import "envoyproxy/protoc-gen-validate/validate/validate.proto";
import "google/rpc/status.proto";

package helloworld;

// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {
    option (google.api.http) = {
        post: "/service/hello"
        body: "*"
    };
  }
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1  [(validate.rules).string.pattern = "^\\w+( +\\w+)*$"]; // Required. Allows multiple words with spaces in between, as it can contain both first and last name;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
  google.rpc.Status status = 2;
}

Использование грамматики из Грамматика Protobuf3

Приведенный выше синтаксический анализ не выполняется в следующих местах

  1. Не удается захватить google.rpc.Status (rpc - зарезервированное ключевое слово)
  2. имя строки = 1 [(validate.rules) .string.pattern = "^ \ w + (+ \ w +) * $"];- Сбой, поскольку он содержит строку (зарезервированное ключевое слово) между опцией. В идеале в моем сценарии мне не нужны никакие параметры данных. Вся строка может быть прочитана как строка name = 1;
  3. option (google.api.http) - вся опция, поскольку она имеет многострочный характер. Это также может быть пропущено в моем сценарии.
...