簡體   English   中英

Antlr語法Java代碼

[英]Antlr Grammar Java Code

我已經使用Antlr3定義了語法語言。 ANTLRWorks生成詞法分析器和解析器代碼。

下面是一個示例語法:

grammar i;

@header {
package com.data;
}

elements    : (value (',' value)*)?;
insert      : 'INSERT INTO table' 'VALUES' '('elements')'';';
WS      : (' '|'\t'|'\f'|'\n'|'\r')+ {skip();}; // handle white space between keywords

上面的語法只是一個例子。 我實際上正在為我的公司開發一種大語法。

我已將語法導入到項目的com.data包中,並且可以使用生成的Lexer和Parser。 我想找出的是:

  • Java代碼是否必須在語法中編寫?
  • 我更喜歡使用Lexer和Parser,並在另一個類中而不是在語法中編寫Java代碼。

根據以下帖子: ANTLR:有一個簡單的例子嗎? 它顯示了一個簡單的示例。 但是,在我的情況下,語法很大,希望將其導入和使用。 我有很多規則:

例如,上面的語法生成以下代碼:

public void insert() throws RecognitionException;

處理此問題的最佳方法是什么? 我有很多規則,它們都是void的返回類型。

每個規則在Java術語中都有特定的含義。 我認為最好的方法不是獲取語法然后檢查調用我的代碼。 例如:

String input = "INSERT INTO table VALUES (null);";
if(input.equals("INSERT INTO table VALUES (null);") {
     insertData();
}

public void insertData() {
   // insert data into database
}

最好檢查每種語法並調用我的代碼?

您的兩個問題的答案:

  1. 不,Java代碼不一定必須嵌入語法中。 您可以改為生成AST。 我的語法很簡單,所以我不這樣做。
  2. 可以使用Observer / Vistor模式來處理生成的AST。 Google應該為您提供一些幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM