我正在學習 JavaCC,因此開始研究巴西大學的一個例子。
使用 JavaCC gradle 插件對檔案進行編碼和編譯作業正常。但是,當使用輸入呼叫生成的類時,程式似乎處于空閑狀態,就好像它正在等待輸入一樣。
java Adder 123 1
實際上,決議器將 System.in 定義為 Adder 類的引數(請參閱下面的源代碼)。因此,我嘗試只運行 Adder 檔案并在之后輸入輸入。不過,這具有相同的效果。
java Adder
123 1
我還嘗試了使用字串文字 "" 并在末尾附加 \n 的不同組合,因為 BNF 在運算式之后需要 EOF。
預編輯:我能夠部分解決問題,但還是決定發布該問題,因為將來它也可能涉及其他人。本教程使用 < 運算子為程式提供輸入。我在我的 Ubuntu WSL 安裝上運行了 java 并讓它使用相同的命令。有趣的是,這在 Windows 上不起作用(盡管本教程顯然使用了相同的作業系統系列——但可能與他們在某些時候提到的 Windows 2000 的版本不同......看圖)。
java Adder < input.txt
input.txt 的內容:123 1
為了完全透明,我添加了 .jj 和 gradle 配置
構建.gradle:
plugins {
id 'java'
id "ca.coglinc.javacc" version "2.4.0"
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
compileJavacc {
inputDirectory = file('src/main/java/javacc')
outputDirectory = file(project.buildDir.absolutePath '/generated/javacc')
}
決議器.jj
// Parser specification
options {
STATIC = false ;
}
PARSER_BEGIN(Adder)
public class Adder {
public static void main( String[] args ) throws ParseException, TokenMgrError {
// System.out.println("Initializing adder...");
Adder parser = new Adder( System.in ) ;
// System.out.println("Parsing input...");
parser.Start() ;
// System.out.println("done");
}
}
PARSER_END(Adder)
// Lexical analyzer specification
SKIP : { " " }
SKIP : { "\n" | "\r" | "\r\n" }
TOKEN : { < PLUS : " " > }
TOKEN : { < NUMBER : (["0"-"9"]) > }
void Start() : {}
{
<NUMBER>
(
<PLUS>
<NUMBER>
)*
<EOF>
}
我已經有一段時間了,所以它不妨歸結為一個細節。明天我會重新嘗試一下,并在此處查看輸入。
神速。
uj5u.com熱心網友回復:
從 WSL 運行命令 java Adder <input.txt 時有效。好像是作業系統的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/461201.html
上一篇:提取兩個具有不連續字串的連續行
