我有以下Antlr语法:
grammar MyGrammar;
doc : intro planet;
intro : 'hi';
planet : 'world';
MLCOMMENT
: '/*' ( options {greedy=false;} : . )* '*/' { $channel = HIDDEN; };
WHITESPACE : (
(' ' | '\t' | '\f')+
|
// handle newlines
( '\r\n' // DOS/Windows
| '\r' // Macintosh
| '\n' // Unix
)
)
{ $channel = HIDDEN; };
Run Code Online (Sandbox Code Playgroud)
在ANTLRWorks 1.2.3解释器,输入hi world
,hi/**/world
和hi /*A*/ world
工作,符合市场预期.
但是,hiworld
也应该接受不应该起作用的输入.我怎么做hiworld
失败?如何在"hi"和"world"之间强制至少有一个空格(或注释)? …
可能会迟到,今晚修复一些错误,但也许SO可以帮助我.有没有人知道是否有办法"跟踪"一些被忽略的异常发生的地方?
基本上我在System.Drawing中发现了一些System.OverflowExceptions,导致某些图形无法绘制(红色X盒综合症).
问题是,我只能从Debug窗口告诉你,并且不能为我的生活找到这个被抛出的地方.我猜这个发生在哪里的编码器写了一个
试试{something} finally {blah}
要么...
尝试{something} catch {// Blah blah blah}
如果我是SOL那么,也许有人可能知道System.Drawing中的哪些方法可能导致StackOverflow感知......
谢谢!
如何忽略文件中的行?
例:
如果您知道文件中的第一行将以say,a或b开头,其余行以c结尾,那么如何解析文件以便忽略以a或b开头的行,并将结束c的行转换为a嵌套列表?
到目前为止我所拥有的:
fname = raw_input('Enter file name: ')
z = open(fname, 'r')
#I tried this but it converts all lines to a nested list
z_list = [i.strip().split() for i in z]
Run Code Online (Sandbox Code Playgroud)
我猜我需要一个for循环.
for line in z:
if line[0] == 'a':
pass
if line[0] == 'b':
pass
if line[-1] == 'c':
list_1 = [line.strip().split()]
Run Code Online (Sandbox Code Playgroud)
以上是一般的想法,但我是制作死代码的专家!如何渲染它不死?
谢谢,Seafoid.
我正在尝试在ac#应用程序中读取文本文件,但我不想读取前两行或最后一行.文件中有8行,所以有效地我只想阅读第3,4,5,6和7行.有什么方法可以做到这一点吗?
示例文件
USE [Shelley的其他数据库]
CREATE TABLE db.exmpcustomers(
fName varchar(100)NULL,
lName varchar(100)NULL,
dateOfBirth date NULL,
houseNumber int NULL,
streetName varchar(100)NULL
)ON [PRIMARY]
编辑
好吧,所以,我已经将Callum Rogers的答案应用到我的代码中,并且出于某种原因,它适用于我编辑的文本文件(我创建了一个文本文件,其中包含我不想省略的行)并且它完全符合它的要求,但每当我使用原始文本文件(上面)尝试它时,它会抛出异常.我在DataGrid中显示此信息,我认为这是抛出异常的地方.
有任何想法吗?
我有一堆需要转储到xaml的WPF控件。一些控件包含存储在其Tag属性中的不可序列化的对象。在保存Xaml时,我需要忽略它们,因为我需要布局本身,但是XamlWriter.Save会生成一条错误消息,指出它们不可序列化。
我有一个包含Maven
项目的目录.它看起来像这样:
.hg
.idea
parentProject
project1
.idea
docs
src
target
pom.xml
project2
.idea
docs
src
target
pom.xml
target
pom.xml
.hgignore
Run Code Online (Sandbox Code Playgroud)
我想忽略我所有项目中的.idea
和target
目录.我已经包含了.idea
和target
目录,.hgignore
但它只忽略了哪个目录中的目录.hgignore
.这意味着,只有在根目录.idea
和target
被忽略.
如果我.hgignore
在所有子项目中添加文件,则不会更改任何文件仍然不会被忽略.
我的忽略列表如下所示:
build
dist
target
faces-config.NavData
.idea
.iml
Run Code Online (Sandbox Code Playgroud)
我应该如何指定从各地.hgignore
获取.idea
和target
忽略?
我有一个USB温度记录器,每隔30秒上传到Cosm.我遇到的问题是,每运行5分钟,当我运行命令时,它会报告文本错误而不是数字.
所以我试图找到一种方法来让它循环,直到它收到一个数字或只是忽略文本并恢复脚本(否则退出,否则).
我非常不优雅的解决方案是这样做:
# convert regular error message to number
if temp_C == "temporarily": # "temporarily" is used as it happens to be the 4th word in the error message
temp_C = 0.0
Run Code Online (Sandbox Code Playgroud)
目前的代码是:
while True:
# read data from temper usb sensor
sensor_reading=commands.getoutput('pcsensor')
#extract single temperature reading from the sensor
data=sensor_reading.split(' ') #Split the string and define temperature
temp_only=str(data[4]) #knocks out celcius reading from line
temp=temp_only.rstrip('C') #Removes the character "C" from the string to allow for plotting
# calibrate …
Run Code Online (Sandbox Code Playgroud) 出于某种原因,当我到达某个地点时,我必须按Enter两次才能让它提交.我添加了clear以防止它跳过输入和ignore()以防止它在缓冲区中保留任何额外的字符.我输入我的输入然后它下降到一个新的行,我Enter再次点击它输入输入并继续该程序没有问题,但我想知道为什么.这是一段代码片段:
cin.ignore();
cout << "Enter Student Major (ex. COSC): ";
cin.getline(student.major, 6);
for(int i = 0; i < sizeof(student.major); i++)
student.major[i] = toupper(student.major[i]);
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在用C++创建一个简单的控制台应用程序,它从用户那里获取字符串和字符串输入.为了简单起见,我想使用string和char数据类型将输入从cin传递给.
要获取字符串输入,我使用的是getline方法:
string var;
cin.ignore(); //I used ignore() because it prevents skipping a line after using cin >> var
getline(cin, var);
Run Code Online (Sandbox Code Playgroud)
要获取char输入,我使用cin >> var方法:
char var;
cin >> var;
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都可以正常工作.但是,当我使用getline输入字符串时,它会忽略我的字符串的第一个字符.
是否可以使用getline和cin >>而不必使用ignore,或者我可以调用的方法以确保不跳过我的第一个字符?
这是我使用getline和cin >>的完整代码示例:
string firstName;
string lastName;
char gender = 'A';
cout << "First Name: ";
cin.ignore();
getline(cin, firstName);
cout << "Last Name: ";
cin.ignore();
getline(cin, lastName);
while(genderChar != …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个git钩子,拼写检查我的提交消息.这是我到目前为止:
#!/bin/sh
ASPELL=$(which aspell)
WORDS=$($ASPELL list < "$1")
if [ -n "$WORDS" ]; then
echo -e "Possible spelling errors found in commit message. Consider using git commit --amend to change the message.\n\tPossible mispelled words: " $WORDS
fi
Run Code Online (Sandbox Code Playgroud)
我不知道如何告诉aspell我想忽略缩进的行(两个或多个空格).这将避免有关文件名,注释等的恼人消息.
谢谢!